2016-06-12 57 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,这就是为什么我需要使用“读取”而不是使用脚本参数,这会更容易。 –