Linux中的$符號的三種常見用法


本文總結了Linux中的$符號的各種用法

用法一:

顯示腳本參數($0$?$*$@$#$$$!)(本質上屬於變量替換)

$0:就是該bash文件名,個位數的,可直接使用數字,但兩位數以上,則必須使用 {} 符號來括住,如${10}.

$?:是上一指令的返回值,成功是0,不成功是1。一般來說,UNIX(linux) 系統的進程以執行系統調用exit() 來結束的。這個回傳值就是status值。回傳給父進程,用來檢查子進程的執行狀態。一般指令程序倘若執行成功,其回傳值為 0;失敗為 1。

$*:所有腳本參數的內容:就是調用調用本bash shell的參數。 

$@:基本上與上面相同。只不過是“$*”返回的是一個字符串,字符串中存在多外空格。 “$@”返回多個字符串。

$#:返回所有腳本參數的個數。

$$ :Shell本身的PID(ProcessID),即當前進程的PID。

$! :Shell最后運行的后台Process的PID

$- :使用Set命令設定的Flag一覽

 

示例:

# touch variable 

# vi variable 

腳本內容如下: 

#!/bin/sh 

echo "number:$#" 

echo "scname:$0" 

echo "first :$1" 

echo "second:$2" 

echo "argume:$@" 

保存退出 

賦予腳本執行權限 

# chmod +x variable 

執行腳本 

# ./variable aa bb 

number:2 

scname:./variable 

first: aa 

second:bb 

argume:aa bb 

通過顯示結果可以看到: 

$# 是傳給腳本的參數個數 

$0 是腳本本身的名字 

$1是傳遞給該shell腳本的第一個參數 

$2是傳遞給該shell腳本的第二個參數 

$@ 是傳給腳本的所有參數的列表

 

用法二:

獲取變量與環境變量的值

如:path=2,則echo $path 或者echo${path}顯示的就是path的值。

在linux及unix的sh中,以$開頭的字符串表示的是sh中定義的變量,這些變量可以是系統自動增加的,也可以是用戶自己定義的$PATH表示的是系統的命令搜索路徑,和windows的%path%是一樣的$HOME則表示是用戶的主目錄,也就是用戶登錄后工作目錄

示例:echo $PATH.

 

用法三:

shell$(( ))$( )``${ }的區別

說明:

${ }這種形式其實與用法一和二是一樣的,屬於變量替換的范疇,只不過在變量替換中可以加上大括號,也可以不加大括號。

簡而言之:$(( ))屬於執行計算公式,等價於$[ ],$( )和` `屬於命令替換,${ }屬於變量替換

(1)$( )與``(反引號):返回括號中命令的結果

    在bash中,$( )與` `(反引號)都是用來作命令替換的,執行括號或者反引號中的命令。

    命令替換與變量替換差不多,都是用來重組命令行的,先完成引號里的命令行,然后將其結果替換出來,再重組成新的命令行

 示例:命令:$ echo today is $(date "+%Y-%m-%d"),顯示:today is 2014-07-01

    

    注:在操作上,這兩者都是達到相應的效果,但是建議使用$( ),理由如下:

        1)``很容易與''搞混亂,尤其對初學者來說。

        2)在多層次的復合替換中,``必須要額外的跳脫處理(反斜線),而$( )比較直觀。

   最后,$( )的弊端是,並不是所有的類unix系統都支持這種方式,但反引號是肯定支持的。

示例:

          1# 將cmd1執行結果作為cmd2參數,再將cmd2結果作為cmd3的參數

               cmd3 $(cmd2 $(cmd1))

         2 # 如果是用反引號,直接引用是不行的,還需要作跳脫處理

          cmd3 `cmd2 \`cmd1\``

(2)${ }變量替換

一般情況下,$var與${var}是沒有區別的,但是用${ }會比較精確的界定變量名稱的范圍

 

示例:

取路徑、文件名、后綴

先賦值一個變量為一個路徑,如下:

file=/dir1/dir2/dir3/my.file.txt

記憶方法如下:

  • # 是去掉左邊(在鍵盤上 # $ 之左邊)

  • % 是去掉右邊(在鍵盤上 % $ 之右邊)

  • 單一符號是最小匹配;兩個符號是最大匹配

  • *是用來匹配不要的字符,也就是想要去掉的那部分

  • 還有指定字符分隔號,與*配合,決定取哪部分

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM