Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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
Bash-see';s空格作为新行_Bash - Fatal编程技术网

Bash-see';s空格作为新行

Bash-see';s空格作为新行,bash,Bash,举个小例子: #!/bin/bash -x myvar="\"Hello Stackoverflow\"" ping $myvar 这样做的结果是,任何命令(这里仅以ping为例)都会自动将“Hello”和“Stackoverflow”之间的空格视为换行符或carridge返回 # ./test.sh + myvar='"Hello Stakeoverflow"' + ping '"Hello' 'Stakeoverflow"' ping: unknown host "Hello 有什么我

举个小例子:

#!/bin/bash -x
myvar="\"Hello Stackoverflow\""
ping $myvar
这样做的结果是,任何命令(这里仅以ping为例)都会自动将“Hello”和“Stackoverflow”之间的空格视为换行符或carridge返回

#  ./test.sh
+ myvar='"Hello Stakeoverflow"'
+ ping '"Hello' 'Stakeoverflow"'
ping: unknown host "Hello
有什么我可以克服的吗


忽略ping的使用,我理解你不能ping单词,它只是有助于举例说明当作为shell命令的参数提供时变量是如何处理的,因此我需要一个错误来说明这一点。

你需要双引号引用变量

ping "$myvar"

内部引用对你没有好处——不要试图使用它们。在
myvar=“\“foo\”
的情况下,外部引号是语法,而内部引号是数据。shell不会将数据引号用于字符串拆分目的,并且以后也不会将其转换为语法(除非使用
eval
,这会带来许多新问题,其中许多会影响安全性);它们所做的只是添加实际命令不需要的数据

您需要在扩展名周围使用语法引号,以防止字符串拆分和全局扩展。比较这四个例子(只有第一个是正确的):

用()做某事{ printf“”“$@” 回声 } myvar=“Hello Stackoverflow” 使用“$myvar”进行操作输出: 用$myvar做点什么输出: myvar2=“\”你好,Stackoverflow“ 用$myvar2做点什么输出: 使用“$myvar2”输出执行以下操作: 如果要在变量中存储应解释为多个参数的内容,则应使用数组:

my_array=( Hello "Stack Overflow" )
do_something_with "${my_array[@]}" # output: <Hello> <Stack Overflow>
my_数组=(Hello“堆栈溢出”)
使用“${my_array[@]}”执行某些操作#输出:

另请参见

非常感谢您抽出时间为我概述这一切。双重引用变量完成了任务!
my_array=( Hello "Stack Overflow" )
do_something_with "${my_array[@]}" # output: <Hello> <Stack Overflow>