substring in string test yields empty variable for test in unix shell
我很了解如何在Unix shell脚本中判断一个字符串是否包含另一个字符串?但是我正在努力让我的代码作为一个例子来处理这个问题。
我在默认的freebsd shell/bin/sh中执行此操作。请不要使用bash答案。
这是我的密码
1 2 3 4 5 6 7 8 9 10 11 12 | while : ${start=$i} var1="$(command | awk -v awk_i=$i 'NR==awk_i { print $1 }')" if test ${var1#*$var2} = $var2 then row=$i break fi i="$(( $i+1 ))" ["$i" -lt $iterate ] do :; done |
我知道var1工作正常,因为测试失败,并继续迭代整个系列直到结束。问题是,当测试应该通过时,var1的变量是空的。
下面是一些调试输出,我们在其中进行了迭代,找到了var2的正确值,理论上通过了测试,然后由于变量没有正确地表示为测试的一部分,所以它继续运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | + awk -v 'awk_i=27' 'NR==awk_i { print $1 }' + var1=file/path/variable + test file/path/variable '=' var2 + i=28 + [ 28 -lt 52 ] + : + : 2 + command + awk -v 'awk_i=28' 'NR==awk_i { print $1 }' + var1=file/path/variable + test '=' var2 test: =: unexpected operator + i=29 + [ 29 -lt 52 ] + : + : 2 + command + awk -v 'awk_i=29' 'NR==awk_i { print $1 }' + var1=file/path/variable + test file/path/variable '=' var2 + i=30 + [ 30 -lt 52 ] |
我甚至尝试过这种替代方法:##*/在Unix Shell脚本中使用
1 | if ${var1##*/$var2} = $var2 |
是否有人能提出任何建议,为什么变量以空白结尾,从而导致测试无法正确输入?是不是可能造成大破坏?(尽管其他输出看起来不错)
谢谢
这样可能有帮助:
1 2 3 4 5 6 7 8 | #!/bin/sh zfs list | while read -r line; do var1=$(echo $line | awk '{print $1'}) echo ${var1} # your logic here # ... done |
在这个基本脚本中,命令