我有一个小脚本可以验证数据库服务器上的某些条件。我想模拟所有这些条件下的失败以测试脚本,因此我添加了以下行:
./print_results ${VAR1} ${VAR2} ... ${VARN}
如果任何变量的值不是零,那是因为它失败了。
所以只是为了测试目的,我添加了这行:
VAR1=1 ; VAR2=1 ; ... ; VARN=1
但每次我想用假结果替换真实结果时,我都需要编辑文件。
这是怎么回事?
[! -z $1 ] && [ "$1" == "Y"] && { echo "Debugging is ACTIVE" ; VAR1=1 ; ... ; VAR2=1 ; }
我想在通过该行后得到 VAR1..N = 1
。
谢谢。
最佳答案
问题是 [
是命令,而 [!
不是。编写代码可能更干净:
test "{$1}" == Y && { echo "Debugging is ACTIVE"; VAR1=1 VAR2=1 ...; }
变量赋值之间不需要分号,但它们不会造成伤害。
这是 sh 的缺点之一。出于某种原因,人们认为使用符号 [
作为命令并将其作为参数传递给 ]
是一个好主意,试图模仿语言中的大括号。不幸的是,这会导致很多混淆,类似于这个问题中所展示的那样。最好完全避免 [
并始终将其拼写为 test
。这两个在功能上是相同的(除了 [
命令必须有 ]
作为最后的参数),并且使用 test
更简洁。 (您希望 test!
工作吗?还是您认为它需要写成 !test
?)
关于linux - Shell 脚本 - 如何根据输入模拟某些结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31212053/