將參數傳遞給函數時,如何將參數分組爲單個參數? 例如shell腳本中的分組
,如果我的腳本文件「my_script.sh」有一個像
echo_arguments() {
echo $1
}
echo_arguments $1
功能現在在UNIX命令行中,如何作爲一個參數指定的參數?
./my_spcript.sh a b c d #these "a b c d" must fit in $1
將參數傳遞給函數時,如何將參數分組爲單個參數? 例如shell腳本中的分組
,如果我的腳本文件「my_script.sh」有一個像
echo_arguments() {
echo $1
}
echo_arguments $1
功能現在在UNIX命令行中,如何作爲一個參數指定的參數?
./my_spcript.sh a b c d #these "a b c d" must fit in $1
可以將多個字成在幾個方面一個參數:
./my_spcript.sh 'a b c d'
./my_spcript.sh "a b c d"
./my_spcript.sh a\ b\ c\ d
基本上,他們都歸結爲告訴shell將空間作爲一個參數的一部分,而不是分離參數之間。上述所有腳本的$ 1設置爲a b c d
,而$ 2,$ 3等未設置。
然而,當展開$ 1ݙࡒ引號,像這樣:
echo_arguments $1
外殼擴展$ 1 然後resplits它處理的空間作爲參數之間的分隔符。因此,雖然my_spcript.sh將a b c d
作爲單個參數獲取,但echo_arguments會將每個字母作爲單獨的參數獲取。通常情況下,解決這個問題最好的辦法是把雙引號$ 1防止它被重新分割(和防止其他一些可能不受歡迎的雜散解析以及):
echo_arguments "$1"
一般來說,每當你用一個變量代替變量,你應該用雙引號把它包裹起來,以防止你看到的那種問題。有些情況下你想要的附加解析,所以你不需要雙引號;但除非您有特別的理由希望shell執行額外的解析,否則請使用雙引號來保存頭痛。
爲了您的具體的例子,另一種方式來「解決」,這將是使echo_arguments呼應所有它的參數,而不僅僅是第一:
echo_arguments() {
echo "[email protected]"
}
注意"[email protected]"
擴展到所有當前的腳本/函數的參數,每一個都被視爲傳遞給它們的命令/函數的一個單獨的參數(基本上,它們完整地傳遞)。
用引號括住參數將允許參數中的空格 - 即./my_spcript.sh 'a b c d'
。你需要做同樣的腳本中:正如其他人,$ @($和*)提供其他的方式來指所有的命令行參數爲一組提到
# my_script.sh
echo_arguments() {
echo $1
}
echo_arguments "$1"
。例如,請參閱http://tldp.org/LDP/abs/html/internalvariables.html瞭解Bash的詳細信息。
我不知道它是否適合,但你可以嘗試採用「變參」在bash:
echo_arguments() {
echo ${@:1:4}
}
echo_arguments ${@:1:4}
這將展開第4個參數。
如果您希望這些成爲一個參數的腳本,然後把它們放入引號(單人或雙人):
./my_script.sh 'a b c d'
相反,如果你希望他們被解析爲單獨的參數,但是您想要將所有參數傳遞給腳本中的函數,則可以使用[email protected]
一次引用它們中的所有參數。
echo_arguments() {
echo "[email protected]"
}
echo_arguments "[email protected]"
我想這就像 ./my_script.sh回聲喜 和我的輸出只是「回聲」 $ 1 –
@NathanPk在這個例子中,你沒有使用引號。他告訴你在調用腳本時在你的論點中加引號。 –
對不起,它有一個錯字錯誤。我用我上面的例子引號 –