一、變數替換${varname:-word} 如果變數varname存在且非null,則返回其值,否則,返回word
${varname-word} 如果變數varname存在,則返回其值,否則,返回word
$ var= $ echo ${var:-"hello"} hello $ echo ${var-"hello"}
$ unset var $ echo ${var-"hello"} hello $
|
${varname:+word} 如果變數varname存在且非null,則返回word,否則,返回null
${varname:=word} 如果變數varname存在且非null,則返回其值,否則,設定它為word,並返回word
$ var= $ echo ${var:="hello"} hello
$ echo ${var}
hello $ var= $ echo ${var="hello"}
$echo ${var}
$ |
${varname:?word} 如果變數varname存在且非null,則返回其值,否則,顯示varname:word,並退出當前的命令或指令碼,省略word會出現預設的資訊parameter null or not set。
${varname?word} 如果變數varname存在,則返回其值,否則,顯示varname:word,並退出當前的命令或指令碼,省略word會出現預設的資訊parameter null or not set。
$ var= $ echo ${var:?"hello"} bash: var: hello $ echo ${var?"hello"}
$ unset var $ echo ${var?"hello"} bash: var: hello $
|
二、模式比對運算(注意:這裡用的模式都是通配字元模式,而非Regex)假設變數 path=/home/tolstoy/mem/long.file.name
${variable#pattern} 如果模式比對於變數的開頭處,則刪除匹配的最短部分,並且返回剩下的部分
例如:${path#/*/} 結果: tolstoy/mem/long.file.name${variable##parttern} 如果模式比對於變數的開頭處,則刪除匹配的最長部分,並且返回剩下的部分
例如:${path##/*/} 結果: long.file.name
${variable%parttern} 如果模式比對於變數的結尾處,則刪除匹配的最短部分,並且返回剩下的部分例如:${path%.*} 結果: /home/tolstoy/mem/long.file${variable%%parttern} 如果模式比對於變數的結尾處,則刪除匹配的最長部分,並且返回剩下的部分例如:${path%%.*} 結果: /home/tolstoy/mem/long
${varname=word} 如果變數varname存在,則返回其值,否則,設定它為word,並返回word
${varname+word} 如果變數varname存在,則返回word,否則,返回null
$ var= $ echo ${var:+"hello"}
$ echo ${var+"hello"} hello $ unset var $ echo ${var+"hello"}
$
|
三、特殊情況
${#var} 表示字符串長度
$# ${#*} ${#@} 表示位置參數的個
-
對於數組來說,${#array_name} 表示的是數組中第一個元素的長度
-
-
對於數組來說,${#array_name[*]}和${#array_name[@]}表示數組中元素的個數