1.$
2.$(cmd)
3.()和{}
4.${var:-string},${var:+string},${var:=string},${var:?string}
5.$((exp))
6.$(var%pattern),$(var%%pattern),$(var#pattern),$(var##pattern)
我一下子也想不起該起什麼標題,就取了這樣一個不太合適的標題。
在這裡我想說的是幾種shell裡的小括號,大括號結構和有括號的變量,命令的用法,如下: PHP代碼: 1.$
2.$(cmd)
3.()和{}
4.${var:-string},${var:+string},${var:=string},${var:?string}
5.$((exp))
6.$(var%pattern),$(var%%pattern),$(var#pattern),$(var##pattern)
現在分述如下:
1.Shell中變量的原形:$
大家常見的變量形式都是$var,如 PHP代碼:
但當你要顯示變量值加隨意的字符(我這裡用AA)時,就會出錯,如下: PHP代碼: $ var=test
$ echo $var
test
這時應該用變量的原形:$,即是加一個大括號來限定變量名稱的范圍,如下 PHP代碼: $ echo $varAA
$
以這個特性,我們可以很方便地寫一個批量改後綴名的程序,我把它命名為mymv,程序如下: PHP代碼: $ echo $AA
testAA
$
程序需要提供一個後綴名,如c,表示改為後綴為c的C程序文件,看下面的測試: PHP代碼: #!/bin/bash
tail=$1
for filename in `ls`
do
mv $filename ${filename}.$tail
done
看樣子程序運行的很好,但這是不完善的程序,有2個要注意的問題:$ ls
a b c
$ mymv c
$ ls
a.c b.c c.c
$
A,目錄下沒有子目錄,如果有一個目錄,假設為dir,則也會被改為dir.c,這顯然不是我們想要的,應該修正這個程序能識別目錄。
B,沒有幫助對程序的參數進行處理,程序應該足夠友好,在用戶沒有給定後綴名時應能處理,像上面的將直接給文件加上了一個點(.),這顯然也不是我們想要的。
因為我們的目的是說明$,這樣已經足夠了,因此這裡不會再對上面的程序進行修正。
2.命令替換$(cmd)
命令替換$(cmd)和符號`cmd`(注意這不是單引號,在美式鍵盤上,`是ESC下面的那個鍵)有相同之處 PHP代碼: $ ls
a b c
$ echo $(ls)
a b c
$ echo