2011-05-13 77 views
1

我有if語句以下變量賦值:內的if語句

if $(echo "$INDEX" | grep -c '^?? ' &> /dev/null) > 0 ; 

它輸出匹配的grep表達弦數。我怎樣才能將該計數分配給if子句中的變量,以便我不必執行該命令兩次以獲取字符串的數量?

回答

1

你的(系列)命令的結果賦值給一個變量是這樣的:

matchedCount=$(echo "$INDEX" | grep -c '^?? ' &> /dev/null) 

,然後調用它時,它需要的是這樣的:$matchedCount

+0

是的,對不起,我的問題很笨 – 2011-05-13 08:22:25

+0

我不太確定我是否已經正確理解它,但是...:P – 2011-05-13 08:24:02

-1

你不能,可靠。先分配,然後測試。

0

像在某些語言中一樣,zsh中沒有可以同時分配和測試的操作符,但是您不必執行兩次操作。不是在完整命令上測試,而是在已經分配的變量上進行測試,然後如果測試結果爲真,則可以準備好變量。如果沒有,你還沒有浪費任何週期。

index_count=$(echo "$INDEX" | grep -c '^?? ' &> /dev/null) 
if ((index_count > 0)); then 
    # Do your thing with $index_count 
fi 
+0

更新了'if'語句 - 適用於算術運算的正確語法。 – 2011-05-13 14:00:54

0

您可以在算術表達式中執行賦值,並在測試中使用結果。這適用於ksh,bash和zsh。

if ((n = $(echo "$INDEX" | grep -c '^?? ' &> /dev/null))); then 
    echo "\$n is not zero" 
fi 

然而,對於人們閱讀你的代碼的理智(包括你在三個月內),我不建議包括這樣分配的一個考驗。正如其他人所建議的,首先分配一個變量,然後測試分配的結果。