我習慣於測試一個變量具有非空值分組(或發出的信息和保釋)使用這樣一行:bash命令測試結果在功能
test $variable || (echo "Value of \$variable cannot be null."; exit 1)
我很新的使用我的腳本中的函數,但我有一個情況下,我需要確保一個非空值傳遞或退出功能。但是,對於「或」情況的命令分組在函數內部的工作方式不同。我寫了這個小測試腳本來證明:
$ cat -n bubu.sh
1 #!/bin/bash
2
3 read -p "give a value for variable \$foo: " -e -i "bar" foo
4
5 function firstfunc {
6 test $1 || (echo "no value"; return 1)
7 echo it looks like \"$1\" is the first value of \$foo
8 return 0
9 }
10
11 function secondfunc {
12 test $1 || return 1
13 echo it looks like \"$1\" is the second value of \$foo
14 return 0
15 }
16 echo "first function:"
17 firstfunc $foo
18 echo returned $?
19
20 echo "second function:"
21 secondfunc $foo
22 echo returned $?
而且在可變具有值的情況下,輸出是這樣的:
$ ./bubu.sh
give a value for variable $foo: bar
first function:
it looks like "bar" is the first value of $foo
returned 0
second function:
it looks like "bar" is the second value of $foo
returned 0
而在情況下,輸出那裏是不是值
$ ./bubu.sh
give a value for variable $foo:
first function:
no value
it looks like "" is the first value of $foo
returned 0
second function:
returned 1
在第一個功能時,沒有價值我得到的第一個C 「或」命令組的ommand和「無值」回聲,但返回命令被傳遞並且函數的其餘部分被執行,直到返回。
爲什麼命令分組的parens在函數內行爲不同,或者我缺少什麼?
的括號不是命令的分組,他們在子shell中運行所包含的命令。使用'{...}'進行命令分組而不創建子shell。 – Barmar