變量替換

1.變量內容修改

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/.txt/.cpp} 將.txt取代爲.cpp:/dir1/dir2/dir3/my.file.cpp

 

2.有條件的變量替換

${variable: -value}

變量替換時將使用命令行中定義的默認值,但變量的值並沒有因此而改變。

例:$echo Hello $UNAME

結果顯示:Hello

$echo Hello ${UNAME: -there}

結果顯示:Hello there

$echo $UNAME

結果顯示: (空)

$UNAME=John

$echo Hello ${UNAME: -there}

結果顯示:Hello John

${variable:=value}

不但使用默認值進行替換,而且將默認值賦給該變量。該形式在變量替換後同時把值value符給變量variable。

例:$echo Hello $UNAME

結果顯示:Hello

$echo Hello ${UNAME:=there}

結果顯示:Hello there

$echo $UNAME

結果顯示:there

${variable: +value}

只有當變量已賦值時才用指定值替換,變量variable已賦值時,其值才用value替換,否則不進行任何替換。

例:$ERROPT=A

$echo ${ERROPT: +"Error tracking is acitive"}

結果顯示:Error tracking is acitive

$ERROPT=

$echo ${ERROPT: +"Error tracking is acitive"}

結果顯示: (空)

${variable:?message}

使用錯誤檢查的條件進行變量替換,當變量variable已設置時,正常替換。

例:$UNAME=

$echo $ {UNAME:?"UNAME HAS NOT BEEN SET"}

結果顯示:UNAME HAS NOT BEEN SET

$UNAME=Stephanie

$echo ${UNAME:?"UNAME HAS NOT BEEN SET"}

結果顯示:Stephanie

 

3.在操作中的使用

集體增加後綴

find . ! -type d |xargs -i mv {} {}.c;

find . ! -type d -exec mv -f {} {}.suf \;

把*.txt 變成 *.cpp

方法一

for file in `find ./ -name "*.txt" -type f`;do mv $file ${file%.*}.cpp;done

方法二

rename .txt  .cpp  *.txt

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