使用变量从另一个脚本调用 shell 脚本时如何引用参数

发布于 2024-12-19 21:57:07 字数 925 浏览 0 评论 0原文

我有两个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

娇柔作态 2024-12-26 21:57:07

使用 "$@" 引用完整引用的所有命令行参数。

Use "$@" to refer to all command-line parameters with quoting intact.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文