首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用引号,多字符串作为参数替换?

如何用引号,多字符串作为参数替换?
EN

Stack Overflow用户
提问于 2018-12-14 04:59:40
回答 2查看 0关注 0票数 0

我正在尝试将包含多个引用单词的字符串变量替换为命令的参数。

因此,给出以下示例脚本(注意shebang中的-x,这会导致输出记录到stderr),

代码语言:javascript
复制
#!/bin/bash -x

myArg="\"hello\" \"world\""
echo "string is:" $myArg

exit

如下:

代码语言:javascript
复制
+ myArg='"hello" "world"'
+ echo 'string is:' '"hello"' '"world"'
string is: "hello" "world"
+ exit

第二行显示实际传递给命令的内容; bash为字符串中的每个单词添加了单引号。因此,如果我引用“$ myArg”,则会发生相同的情况,但是对于整个字符串而不是每个单词。

现在,想象一下echo,我们将字符串传递给一个程序,其中一些参数需要引用模式,例如"*"(不能由shell扩展)。

为了澄清,我不希望在扩展期间添加单引号。我怎么能实现这个目标?

EN

回答 2

Stack Overflow用户

发布于 2018-12-14 13:00:21

不要使用引号,使用数组(见BashFAQ#050):

代码语言:javascript
复制
$ myArgs=("hello" "world" "multiword arg with * ?")
+ myArgs=("hello" "world" "multiword arg with * ?")
$ echo "${myArgs[@]}"
+ echo hello world 'multiword arg with * ?'
hello world multiword arg with * ?

如果它确实需要在字符串中以引用字符串的形式出现,那么你要么必须使用类似的eval "echo $myArg"(如果你不小心,可能会导致一些非常讨厌的错误)或者自己解析(这是会变得很困难)。

票数 0
EN

Stack Overflow用户

发布于 2018-12-14 14:08:25

如果要将变量值作为参数传递(99%的情况在SO上),只需使用正确的引用:

代码语言:javascript
复制
arg="foo bar"
command "$arg"

如果要传递多个参数,请使用数组:

代码语言:javascript
复制
args=("foo bar" "baz ban" bay)
command "${args[@]}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档