shell中${ } 的一些特異功能

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

變量的截斷操作

命令

意義

結果

${file#*/}

去掉第一個 / 及左邊的字符串

dir1/dir2/dir3/my.file.txt

${file##*/}

去掉最後一個 / 及左邊的字符串

my.file.txt

${file#*.}

去掉第一個 . 及左邊的字符串

file.txt

${file##*.}

去掉最後一個 . 及左邊的字符串

txt

${file%/*}

去掉最後一個 / 及右邊的字符串

/dir1/dir2/dir3

${file%%/*}

去掉第一個 / 及右邊的字符串

空串

${file%.*}

去掉最後一個 . 及右邊的字符串

/dir1/dir2/dir3/my.file

${file%%.*}

去掉第一個 . 及右邊的字符串

/dir1/dir2/dir3/my

變量字符串提取

命令

意義

結果

${file:0:5}

提取第0個字符開始的連續5個字符

/dir1

${file:5:5}

提取第5個字符開始的連續5個字符

/dir2

變量字符串替換

命令

意義

結果

${file/dir/path}

將第一個 dir 替換爲path

/path1/dir2/dir3/my.file.txt

${file//dir/path}

將全部 dir 替換爲path

/path1/path2/path3/my.file.txt

${#file}

計算出變量 file 值的長度

27

變量值的長度

命令

意義

結果

${#file}

計算出變量 file 值的長度

27

 

針對變量狀態賦值

變量的狀態有:空值、非空值和未設定

命令

意義

${file-my.file.txt}

若$file沒有設定,則使用my.file.txt作返回值。(空值及非空值時不作處理)

${file:-my.file.txt}

若$file沒有設定或爲空值,則使用my.file.txt作返回值。(非空值時不作處理)

${file+my.file.txt}

若$file設爲空值或非空值,均使用my.file.txt作返回值。(沒設定時不作處理)

${file:+my.file.txt}

若$file爲非空值,則使用my.file.txt作返回值。(沒設定及空值時不作處理)

${file=my.file.txt}

$file未設定,則使用my.file.txt作返回值,同時將$file 賦值爲 my.file.txt。(空值及非空值時不作處理)

${file:=my.file.txt}

$file未設定或爲空值,則使用 my.file.txt 作返回值,同時將 $file 賦值爲my.file.txt。(非空值時不處理)

${file?my.file.txt}

$file未設定時將 my.file.txt 輸出至STDERR(空值、非空不處理)

${file:?my.file.txt}

$file未設定或爲空值時將 my.file.txt 輸出至STDERR(非空不處理)

數組運算

A=(a b c def)

命令

意義

結果

${A[@]}或${A[*]}

得到數組全部值

a b c def

${A[0]}

得到數組中的第一個元素

a

${A[3]}

得到數組中的第四個元素

def

${#A[@]}或${#A[*]}

數組元素個數

4

${#A[0]}

數組第一個元素的長度

1

${#A[3]}

數組第四個元素的長度

3

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章