2012-10-01 88 views
0
比較

是否有可能做一些類似於在bash腳本以下?:執行內部反引號

totaltrackseval=`if [[ $totaltracks -ge 0]]; then; echo '-N $totaltracks'; else; echo 'elsetext'; fi` 

如果是這樣,怎麼樣?

回答

3

這將做你想做的。第一次你幾乎做對了。請注意,我將您的單引號替換爲雙引號。變量替換在單引號內不起作用。另外,當您使用括號進行測試時,需要在內部填充空格。

totaltrackseval=`if [ $totaltracks -ge 0 ]; 
       then 
        echo "-N $totaltracks" 
       else 
        echo "elsetext" 
       fi` 

如果你喜歡一個單行實現:

totaltrackseval=`if [ $totaltracks -ge 0 ]; then echo "-N $totaltracks"; else echo "elsetext"; fi` 
+0

這是比我更清潔的解決方案,upvote。 – Nelson

+0

謝謝,這工作完美。當我打勾時,我會做出迴應,但它已經是凌晨3點了,我想睡了:) –

1

你可以做到這一點,就像這樣:

totaltrackseval=`bash -c "if [[ $totaltracks -ge 0 ]]; then echo '-N $totaltracks'; else echo 'elsetext'; fi"` 

測試:

[email protected]:~$ totaltracks=5 
[email protected]:~$ totaltrackseval=`bash -c "if [[ $totaltracks -ge 0 ]]; then echo '-N $totaltracks'; else echo 'elsetext'; fi"` 
[email protected]:~$ echo $totaltrackseval 
-N 5 
+0

這對單引號內的$ totaltracks無效。 –

+0

$ totaltracks位於if的TRUE部分中的單引號內,並且執行正確,您能澄清爲什麼這不會起作用嗎?一個具體的例子? – Nelson

+0

因爲在單引號內,$ totaltracks引用不會被bash的實際值所取代。示例腳本: –

0

另一種方法,使用兩種類型的參數擴展。我假設totaltracks是未設置或具有非負整數值。

# Use an alternate value for totaltracks if it is set 
totaltrackseval=${totaltracks:+-N $totaltracks} 

# Use a default text if totaltrackseval still has no value 
: ${totaltrackseval:=elsetext}