将带有引号的用户输入作为参数传递以在 bash 中运行



我想传递包含引号和空格的用户输入(例如:"b c")以正常运行bash,但找不到一种方法来做到这一点。

test.sh:

#!/bin/bash
myFunction () {
    echo "Parameter 1: $1"
    echo "Parameter 2: $2"
}
read -p "Enter parameters: " parameters
myFunction $parameters

当我运行上面并输入"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"在一起。

你想要的不是你通常应该做的事情,但是你可以使用eval来获得想要的结果:

eval "myFunction $parameters"

您应该只接受它们作为脚本的参数:

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

并用以下命令调用它:

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

另一件错误的事情是你没有引用$parameters,这将使它经历分词和通感,myFunction会这样称呼:

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

完整代码:

#!/bin/bash
myFunction () {
    echo "Parameter 1: $1"
    echo "Parameter 2: $2"
}
read -rp "Enter parameters: " parameters
eval "myFunction $parameters"

我还在阅读时卡了一个-r,以从字面上处理反斜杠。

相关内容

  • 没有找到相关文章

最新更新