使用变量从另一个脚本调用 shell 脚本时如何引用参数
我有两个 shell 脚本。第一个脚本根据收到的参数动态创建对第二个脚本的调用,然后执行该调用。
我的问题是第一个脚本获取的参数可能包含空格,因此我必须在调用 script2 时引用该参数。
这是问题的一个例子:
script1.sh:
#!/bin/sh
param=$1
command="./script2.sh \"$param\""
echo $command
$command
script2.sh:
#!/bin/sh
param=$1
echo "the value of param is $param"
当我运行:
./script1.sh "value with spaces"
我得到:
./script2.sh "value with spaces"
the value of param is "value
这当然不是我需要的。
这里出了什么问题?
TIA。
编辑:
由于tripleee评论中有用的链接,我找到了解决方案。这是以防万一它对任何人有帮助。
简而言之,为了解决这个问题,应该使用数组作为参数。
脚本1.sh:
#!/bin/sh
param=$1
args=("$param")
script_name="./script2.sh"
echo $script_name "${args[@]}"
$script_name "${args[@]}"
I have two shell scripts. One script dynamically creates the call to the second script, based on the parameter it received, and then executes the call.
My problem is that the parameters the first script gets may contain spaces, so I must quote the parameter in the call to script2.
This is an example to the problem:
script1.sh:
#!/bin/sh
param=$1
command="./script2.sh \"$param\""
echo $command
$command
script2.sh:
#!/bin/sh
param=$1
echo "the value of param is $param"
When I run:
./script1.sh "value with spaces"
I get:
./script2.sh "value with spaces"
the value of param is "value
Which is of course not what I need.
What is wrong here??
TIA.
EDIT :
I found the solution thanks to the useful link in tripleee's comment. Here it is in case it helps anybody.
In short, in order to solve this, one should use an array for the arguments.
script1.sh:
#!/bin/sh
param=$1
args=("$param")
script_name="./script2.sh"
echo $script_name "${args[@]}"
$script_name "${args[@]}"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用
"$@"
引用完整引用的所有命令行参数。Use
"$@"
to refer to all command-line parameters with quoting intact.