我有if語句以下變量賦值:內的if語句
if $(echo "$INDEX" | grep -c '^?? ' &> /dev/null) > 0 ;
它輸出匹配的grep表達弦數。我怎樣才能將該計數分配給if子句中的變量,以便我不必執行該命令兩次以獲取字符串的數量?
我有if語句以下變量賦值:內的if語句
if $(echo "$INDEX" | grep -c '^?? ' &> /dev/null) > 0 ;
它輸出匹配的grep表達弦數。我怎樣才能將該計數分配給if子句中的變量,以便我不必執行該命令兩次以獲取字符串的數量?
你的(系列)命令的結果賦值給一個變量是這樣的:
matchedCount=$(echo "$INDEX" | grep -c '^?? ' &> /dev/null)
,然後調用它時,它需要的是這樣的:$matchedCount
你不能,可靠。先分配,然後測試。
像在某些語言中一樣,zsh
中沒有可以同時分配和測試的操作符,但是您不必執行兩次操作。不是在完整命令上測試,而是在已經分配的變量上進行測試,然後如果測試結果爲真,則可以準備好變量。如果沒有,你還沒有浪費任何週期。
index_count=$(echo "$INDEX" | grep -c '^?? ' &> /dev/null)
if ((index_count > 0)); then
# Do your thing with $index_count
fi
更新了'if'語句 - 適用於算術運算的正確語法。 – 2011-05-13 14:00:54
您可以在算術表達式中執行賦值,並在測試中使用結果。這適用於ksh,bash和zsh。
if ((n = $(echo "$INDEX" | grep -c '^?? ' &> /dev/null))); then
echo "\$n is not zero"
fi
然而,對於人們閱讀你的代碼的理智(包括你在三個月內),我不建議包括這樣分配的一個考驗。正如其他人所建議的,首先分配一個變量,然後測試分配的結果。
是的,對不起,我的問題很笨 – 2011-05-13 08:22:25
我不太確定我是否已經正確理解它,但是...:P – 2011-05-13 08:24:02