我已經閱讀了How do you tell if a string contains another string in Unix shell scripting?,但我正在努力讓我的代碼以此爲例工作。字符串測試中的子串在unix shell中產生空變量用於測試
我在默認的FreeBSD shell/bin/sh中這樣做。請不要bash回答。
這裏是我的代碼
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值並在理論上通過測試,然後因爲變量沒有被正確表示爲測試的一部分,所以它繼續前進。
+ 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 ]
我甚至試過這種替代方法: ##*/ use in UNIX Shell Scripting
if ${var1##*/$var2} = $var2
任何人都可以做任何建議,爲什麼變量是結束了空白,因此測試失敗正確的條目?它可能會造成嚴重破壞嗎? (雖然其他的輸出都很好,似乎)
感謝
你究竟想做什麼,你的意見是什麼?在FreeBSD中,默認情況下你有[csh](https://www.freebsd.org/cgi/man.cgi?csh(1))。 – nbari
@nbari 我正在尋找遍歷zfs數據集尋找各種不同的東西。 當它發現getopts正在尋找的數據集非常具體時,它似乎失敗了。 – Madtempest
'dataset_name = 「$(ZFS名單| awk的-v awk_i = $ I 'NR == awk_i {$打印1}')」 如果$ {dataset_name#* $}集= $數據集 然後 行= $ I 打破' 這有幫助嗎? – Madtempest