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>