我习惯于测试一个变量具有非空值分组(或发出的信息和保释)使用这样一行: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