2007年1月22日 星期一

Bash: ${foo:=bar} ${foo:-bar} ${foo:+bar} ${foo:?bar}

${foo:=bar}

 1: #!/bin/sh
2:
3: foo='foo'
4: echo ${foo}
5: echo ${foo:=bar}
6: echo ${foo}
7:
8: unset foo
9: echo ${foo}
10: echo ${foo:=bar}
11: echo ${foo}
執行後的輸出結果會是
foo
foo
foo

bar
bar
因為 ${foo:=bar} 的意義是:
當 $foo 值不存在或者是空字串時,將 $foo 的值指定為 'bar',並且傳回 'bar'

所以第5行的結果並不會改變 $foo 的值並且傳回 'foo'
而第9行的作用是把 $foo 的值指定為 'bar' 並且傳回 'bar'



${foo:-bar}

 1: #!/bin/sh
2:
3: foo='foo'
4: echo ${foo}
5: echo ${foo:-bar}
6: echo ${foo}
7:
8: unset foo
9: echo ${foo}
10: echo ${foo:-bar}
11: echo ${foo}
執行後的輸出結果會是
foo
foo
foo

bar
因為 ${foo:-bar} 的意義是:
當 $foo 值不存在或者是空字串時,傳回 'bar',但是不改變 $foo 的值



${foo:+bar}

 1: #!/bin/sh
2:
3: foo='foo'
4: echo ${foo}
5: echo ${foo:+bar}
6: echo ${foo}
7:
8: unset foo
9: echo ${foo}
10: echo ${foo:+bar}
11: echo ${foo}
執行後的輸出結果會是
foo
bar
foo


因為 ${foo:+bar} 的意義是:
當 $foo 值存在並且不為空字串時,傳回 'bar',但是不改變 $foo 的值



${foo:?bar}

1: #!/bin/sh
2:
3: foo='foo'
4: : ${foo:?bar}
5: echo "Here"
6:
7: unset foo
8: : ${foo:?bar}
9: echo "Cannot be here."
執行後的輸出結果會是
Here
sample.sh: line 8: foo: bar
因為 ${foo:?bar} 只是拿來檢查 $foo 的值存在並且不為空字串
檢查不通過時就會印出錯誤訊息並且結束程式
其中的 'bar' 是自訂的錯誤訊息,不填的話輸出結果就變成了
Here
sample.sh: line 8: foo: parameter null or not set

張貼留言