Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何插入双倒逗号;在UNIX bash中的bash字符串中_Linux_Bash_Unix - Fatal编程技术网

Linux 如何插入双倒逗号;在UNIX bash中的bash字符串中

Linux 如何插入双倒逗号;在UNIX bash中的bash字符串中,linux,bash,unix,Linux,Bash,Unix,我有一根像这样的bash弦 --db newdb --collection newcoll --type=csv --fields name,value" 我想在字段后面的字符串中插入一个双倒逗号“,输出如下 --db newdb --collection newcoll --type=csv --fields "name,value" 你必须逃避它们。互联网上有很多关于这个话题的文章,只要用谷歌搜索一下,你就会知道逃避是什么。为了向你展示如何做到这一点,我将举一个例子: x="--db

我有一根像这样的bash弦

--db newdb --collection newcoll --type=csv --fields name,value" 
我想在字段后面的字符串中插入一个双倒逗号
,输出如下

--db newdb --collection newcoll --type=csv --fields "name,value"
你必须逃避它们。互联网上有很多关于这个话题的文章,只要用谷歌搜索一下,你就会知道逃避是什么。为了向你展示如何做到这一点,我将举一个例子:

x="--db newdb --collection newcoll --type=csv --fields \"name,value"
将它与你所拥有的进行比较,你会很快发现不同之处。但是,去谷歌搜索什么是逃逸……一个有用的链接是,你可以自己找到一些其他链接。

你必须逃逸。互联网上有很多关于这个主题的文章,只要谷歌一下,你就会知道逃逸是什么。为了向你展示如何做到这一点,我将给你一个n例如:

x="--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"
……或者:

### 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

但是,同样——上面的任何一个都不适合当前的用例。

您想要的符号称为“双引号”

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"
……或者:

### 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

但是,同样——上述任何一项都不适用于当前的用例。

将其转义…一般来说,参数列表不应存储在字符串中。请参阅描述此实践导致的问题和替代解决方案。将其转义…一般来说,参数列表不应存储在字符串中。请参阅描述问题这一做法的原因是什么,以及替代的解决方案。提供经过仔细审查的参考资料可能比鼓励人们使用谷歌更好——关于bash,有很多关于PageRank高分的垃圾文章(我想到的是ABS,它相当于HTML/JavaScript领域中的W3Schools)。OP的问题意味着他们试图生成一个字符串以供以后计算——如果是这样的话,在您正确回答问题时(但缺少最后一个文字引号),问题本身就有问题。我觉得这个链接还可以。当然不是最好的,但一开始就可以。事实上,因为字符串看起来像是为某些脚本提供参数的标志。是的,你提供的链接确实很好;bash黑客的wiki是一个可靠的参考。它鼓励“只搜索它”“我反对,我同意你的看法。当你开始做某事时,很难区分垃圾和宝藏,但最好在开始时就习惯它,然后习惯于总是立即得到你想要的东西。。。因为总有一天,一个人必须帮助自己,因为没有其他选择……扩展隐喻——我们在StackOverflow上的目的是成为宝藏的来源。当然,人们需要学会帮助自己,但要给他们一个最好的开始(在从谷壳中过滤小麦的基础上)这就是我们来这里的目的。也许最好提供经过仔细审查的参考资料,而不是鼓励人们使用谷歌——有很多关于bash的垃圾文章都有很高的PageRank分数(我想到了ABS,它相当于HTML/JavaScript领域中的W3Schools)。OP的问题意味着他们试图生成一个字符串以供以后计算——如果是这样的话,那么当您正确回答问题时(但缺少最后一个文字引用),问题本身就有问题。我发现这个链接没有问题。当然不是最好的,但一开始还可以。事实上,因为字符串看起来像是带有参数的标志,提供给某些脚本;bash黑客的wiki是一个可靠的参考。这是对我提出异议的“谷歌搜索”的鼓励。我同意你的看法。当你开始做某事时,很难区分垃圾和宝藏,但最好在开始时就习惯它,然后习惯于总是立即得到你想要的东西。。。因为总有一天,一个人必须帮助自己,因为没有其他选择……扩展隐喻——我们在StackOverflow上的目的是成为宝藏的来源。当然,人们需要学会帮助自己,但给他们一个最好的开始(在从谷壳中过滤小麦的基础上)是我们在这里的目的。