2011-04-06 84 views
2

我遇到的問題是處理包含我的bash腳本中的空白的參數。將參數中的空格處理爲bash腳本

腳本

#!/bin/bash 
for i in $* 
do 
    echo "$i" 
done 

呼叫(以2個參數)

$ ./script.sh "a b" "c" 

的實際輸出(如,如果有3個參數)

a 
b 
c 

預期輸出(好像有2個參數)

a b 
c 

有人能解釋如何得到預期的輸出?

回答

6

在第一行上更改$*"[email protected]"

+1

[爲什麼](http://mywiki.wooledge.org/BashPitfalls#for_arg_in_.24.2A) – l0b0 2011-04-06 10:26:47

+0

謝謝,也是一個很好的資源。 – Flash 2011-04-06 10:48:15

+0

答案很好,但我意識到我沒有提出正確的問題:我如何分配每個參數(「a b」和「c」)來分隔代碼中的變量? – Max 2011-04-06 13:13:50

0

你想要的是參數$ @(你必須把它放在「」)而不是$ *。

0

回覆留在2011年如何每個參數賦值給一個變量評論...

此bash函數分配陣列中的每個參數的項目。這些可以在其他地方使用。

在考慮中的函數發現特定類型的文件,然後裏grep它們:

search "multi word search terms" txt 

相關線是第一5.我們初始化一個數組,循環傳遞的參數,並且將它們分配爲數組中的項目。這些然後根據需要由功能引用。

這樣你可以指定一個可選的第三個參數在你選擇的編輯器打開文件:

search "multi word search terms" txt mate 

變量$搜索關鍵詞已逃脫的空間,這樣的grep會接受它作爲一個字符串。

function search() { 
     terms=(); 
     for i in "[email protected]" 
     do 
       terms+=("$i") 
     done 

     file='*.'${terms[1]}; 
     searchterm=${terms[0]// /\\ }; 

     if [ -n "$3" ]; then 
       find . -type f -name $file -exec grep -irl "$searchterm" {} \; | xargs ${terms[2]}; 
     else 
       find . -type f -name $file -exec grep -irl "$searchterm" {} \;; 
     fi 
} 

希望這可以幫助別人!