gpt4 book ai didi

linux - 如何在 UNIX bash 中的 bash 字符串中插入双引号

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:37 31 4
gpt4 key购买 nike

我有一个像

这样的 bash 字符串
--db newdb --collection newcoll --type=csv --fields name,value" 

我想在这个字符串的字段后插入一个双引号",输出应该是这样的

--db newdb --collection newcoll --type=csv --fields "name,value"

最佳答案

你想要的符号叫做“双引号”。

TL;DR:改用数组

如果该字符串的目的是生成参数列表的一部分,则完全不要尝试在字符串中存储文字引号。相反,将您想要的数据存储在一个数组中,并在运行程序时扩展该数组:

# THIS IS THE CORRECT/BEST PRACTICE
args=( --db newdb --collection newcoll --type=csv --fields "name,value" )
myprog "${args[@]}"

以上正确地将引号视为句法而不是文字:它将name,value放入--fields之后的参数中,只是正如 myprog --fields "name,value" 那样。


在上下文中:不要将参数列表存储在字符串中

取而代之的是:

### THIS IS BUGGY: SEE http://mywiki.wooledge.org/BashFAQ/050
args='--db newdb --collection newcoll --type=csv --fields "name,value"'
myprog $args

...或者这个:

### THIS IS BUGGY: SEE http://mywiki.wooledge.org/BashFAQ/050
args="--db newdb --collection newcoll --type=csv --fields \"name,value\""
myprog $args

...或者这个:

### THIS HAS SECURITY VULNERABILITIES IF UNTRUSTED DATA IS SUBSTITUTED
### SEE http://mywiki.wooledge.org/BashFAQ/048
args='--db newdb --collection newcoll --type=csv --fields "name,value"'
eval "myprog $args"

断章取意的答案:双引号的转义机制

以下所有内容都将传递给 echo 单个文字双引号:

echo \"
echo '"'
echo "\""

...并且可以在子字符串中使用...

str=hello\"world
str='hello"world'
str="hello\"world"

...甚至与其他引用类型混合:

str="$var"'"'world   ## $var is in double quotes, " is in single quotes, world is unquoted

但同样——以上都不适合手头的用例。

关于linux - 如何在 UNIX bash 中的 bash 字符串中插入双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46075767/

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