2016-06-12 24 views
0

我想將包含引號和空格的用戶輸入(例如:「bc」)傳遞給bash函數並找不到方法來執行I去做。傳遞帶引號的用戶輸入作爲參數在bash中運行

test.sh:

當我上述和輸入了 「B C」 運行結果如下:

$ ./test.sh 
Enter parameters: a "b c" 
Parameter 1: a 
Parameter 2: "b 

報價被忽略。參數被空格分隔。

用引號括起來的變量(myFunction "$parameters")並沒有幫助,因爲包括引號的整個字符串將變爲$1$2將爲空。

我需要的是$1=="a"$2=="b c"但我找不到如何使bash膠合"bc"在一起。

回答

1

你想要的是不是你通常應該做的事情,但是你可以使用eval來獲得期望的結果:

eval "myFunction $parameters" 

你應該評價者只是接受他們爲你的腳本參數:

% cat my_script.bash 
#!/bin/bash 
myFunction() { 
    echo "Parameter 1: $1" 
    echo "Parameter 2: $2" 
} 
myFunction "[email protected]" 

裏調用:

% ./my_script.bash a "b c" 
Parameter 1: a 
Parameter 2: b c 

另一件事,是錯的是你沒有報價$parameters,這將使其經歷word splittingglobbingmyFunction將被稱爲像這樣:

myFunction 'a' '"b' 'c"' 

全碼:

#!/bin/bash 
myFunction() { 
    echo "Parameter 1: $1" 
    echo "Parameter 2: $2" 
} 

read -rp "Enter parameters: " parameters 
eval "myFunction $parameters" 

我也卡住-r閱讀以字面處理反斜槓。

+0

謝謝eval工作。我的腳本是一個交互式cli,這就是爲什麼我需要使用「讀取」而不是使用腳本參數,這會更容易。 –