我遇到的問題是處理包含我的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
有人能解釋如何得到預期的輸出?
我遇到的問題是處理包含我的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
有人能解釋如何得到預期的輸出?
在第一行上更改$*
到"[email protected]"
。
你想要的是參數$ @(你必須把它放在「」)而不是$ *。
回覆留在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
}
希望這可以幫助別人!
[爲什麼](http://mywiki.wooledge.org/BashPitfalls#for_arg_in_.24.2A) – l0b0 2011-04-06 10:26:47
謝謝,也是一個很好的資源。 – Flash 2011-04-06 10:48:15
答案很好,但我意識到我沒有提出正確的問題:我如何分配每個參數(「a b」和「c」)來分隔代碼中的變量? – Max 2011-04-06 13:13:50