gpt4 book ai didi

shell - 将 shell 转义的参数字符串传递给 Bourne shell 中的子命令

转载 作者:行者123 更新时间:2023-12-03 18:23:39 25 4
gpt4 key购买 nike

假设我有一个我想运行的命令( cmd )和一个包含我想传递给函数的参数的变量(类似于 --foo 'bar baz' qux )。像这样:

#!/bin/sh
command=cmd
args="--foo 'bar baz' qux"

参数包含引号,就像上面显示的那样,将包含空格的参数组合在一起。然后我想运行命令:
$command $args

当然,这会导致运行带有四个参数的命令: --foo , 'bar , baz' , 和 qux .我习惯的替代方案(即,当使用 "$@" 时)提出了一个不同的问题:
$command "$args"

这将执行带有一个参数的命令: --foo 'bar baz' qux .

如何按预期运行带有三个参数( --foobar bazqux )的命令?

最佳答案

使用数组来准确指定您的参数列表,而不会妨碍您进行字符串拆分(这是这里做错的事情):

args=( --foo "bar baz" qux )
command "${args[@]}"

如果您需要动态构建参数列表,可以使用 += 附加到数组中。 :
args=( )
while ...; do
args+=( "$another_argument" )
done
call_your_subprocess "${args[@]}"

注意引号的使用,和 [@]而不是 [*] , 是必不可少的。

关于shell - 将 shell 转义的参数字符串传递给 Bourne shell 中的子命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9982573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com