首先要區分shell語句的執行後果和shell操作符的返回值:
echo "abcd"
語句的執行後果是列印abcd,並非這個語句的返回值是abcd。$var
表示式中$
操作符的返回值是變數var的值。
``
或$()
操作符能夠將其包裹的shell語句的列印結果作為返回值返回。下面詳細說明:
shell中有一些操作符,這些操作符能夠返回一些值,這些值若不是有效的shell命令就不能直接在shell裡執行,舉例說明:
比如$
操作符能夠返回變數的值:
i=abcd
$i#返回字串abcd,直接在shell裡輸入$i回車,會提示找不到為abcd的shell命令。
但是可以將$i
返回的值作為其他命令的引數,如:
echo
$i#會列印abcd
也可以作為值賦給其他變數,如:
j=
$i
同理,``
操作符能夠將其包裹命令的執行結果返回:
`
echo
"abcd"
` #返回字串abcd,直接在shell裡輸入`echo "abcd"`也會報錯,因為abcd不是shell命令。
假設乙個資料夾下只有兩個檔案(ls和zzz),在此資料夾下執行`ls`
會列印zzz,什麼原因?
因為`ls`
會返回ls
命令的執行結果(也就是字串"ls zzz"
),shell將這個執行結果解釋為命令,然後執行,執行的結果就是列印zzz。
[19:31 ~/desktop/t]
>
lsls zzz
[19:31 ~/desktop/t]
>
ls zzz
zzz[19:31 ~/desktop/t]
>`ls
`zzz
$var
#返回變數var的值`ls
` #返回ls命令的執行結果
$(ls
) #同上
$((3+4
)) #返回3+4的值
$[ 3+4 ]
#同上
使用$()
或``
將命令結果賦值給變數時,加雙引號能保留換行符:
cat t.txtab
echo
`cat t.txt`
a b #換行丟失
echo
"`cat t.txt`
"#加引號後換行保留
ab
Shell 表示式判斷
表示式放到 中 檔案表示式 e filename 如果 filename存在,則為真 d filename 如果 filename為目錄,則為真 f filename 如果 filename為常規檔案,則為真 l filename 如果 filename為符號鏈結,則為真 r filename 如果...
shell指令碼表示式
整數變數表示式 等於 eq equal 大於 gt greater than 小於 lt less than 大於或等於 ge greater than or equal 小於或等於 le less than or equal 不相等 ne not equal 檔案表示式 e filename 如果...
Shell命令 正規表示式
正規表示式是包含匹配,萬用字元是完全匹配 基礎正規表示式 test.txt示例檔案12 3456 78910 1112 mr.james said he was the honestmanincompanyy.123despire him.but since miss.mary came,she n...