Title here
Summary here
喺 Bash 入面,參數展開係一種用嚟操作同處理變量內容嘅機制。 通過參數展開,可以攞變量嘅值,修改變量嘅值,或者為未設置嘅變量提供默認值。
Shell 參數展開
最常見嘅方式。
var="Bash"
echo "Hello, ${var}!"
${var+DEFAULT}
unset var
echo ${var+foo}
var=
echo ${var+foo}
foo
可以用呢個標記嚟判斷變量係咪未定義。
#!/usr/bin/env bash
if [ -n "${var+defined}" ]; then
echo "var already defined"
else
echo "var not defined"
fi
注意
如果 ${var+defined}
冇用雙引號,當返回空字符串嘅時候,條件就會變成 [ -n ]
,
呢個係一個有效嘅條件,唔會產生任何錯誤,且佢嘅返回值為真。顯然呢個係唔合理嘅,所以必須加雙引號。
${var-DEFAULT}
unset var
echo ${var-foo}
foo
var=
echo ${var-foo}
var 同 DEFAULT 嘅值有可能相同,所以唔可以用嚟判斷 var 係咪被定義。
${var:+DEFAULT}
var=abc
echo ${var:+foo}
foo
${var:-DEFAULT}
unset var
echo ${var:-foo}
var=
echo ${var:-foo}
上面嘅兩個例子都會輸出 foo。
unset var
echo ${var:=foo}
echo $var
foo
foo
var="heybro!"
echo ${var:3:4}
bro!
var="heybro!"
echo ${#var}
7
刪除最短匹配:用 #
,模式 */
。
var="a/b/c"
echo ${var#*/}
b/c
刪除最長匹配:用 ##
,模式 */
。
var="a/b/c"
echo ${var##*/}
c
刪除最短匹配:用 %
,模式 /*
。
var="a/b/c"
echo ${var%/*}
a/b
刪除最長匹配:用 %%
,模式 /*
。
var="a/b/c"
echo ${var%%/*}
a
var="aa bb aa"
echo ${var/aa/cc}
cc bb aa
var="aa bb aa"
echo ${var//aa/cc}
cc bb cc