在某些情况下,引号可以解决包含空格的参数。
$ command "param 1" "param 2" ...
Run Code Online (Sandbox Code Playgroud)
它也可以用于for循环。
$ for v in a "b c" "d e"
do
echo "|$v|"
done
|a|
|b c|
|d e|
Run Code Online (Sandbox Code Playgroud)
但是当我在之后使用变量时in,它不起作用:
$ var='a "b c" "d e"'
$ echo $var
a "b c" "d e"
$ for v in $var
do
echo "|$v|"
done
|a|
|"b|
|c"|
|"d|
|e"|
Run Code Online (Sandbox Code Playgroud)
它不起作用。我该如何解决这个问题?
这就是发明数组的原因:
$ var=(a "b c" "d e")
$ for v in "${var[@]}"; do echo "|$v|"; done
|a|
|b c|
|d e|
Run Code Online (Sandbox Code Playgroud)
考虑:
var='a "b c" "d e"'
Run Code Online (Sandbox Code Playgroud)
上面的问题是,一旦你引用了一句话,它就失去了魔力。上面的单引号字符串内的双引号是字符,就像任何其他字符一样:它们不再将任何内容绑定在一起。这就是为什么输出看起来像这样:
$ var=(a "b c" "d e")
$ for v in "${var[@]}"; do echo "|$v|"; done
|a|
|b c|
|d e|
Run Code Online (Sandbox Code Playgroud)
可以使用 readarray 以换行符分隔的形式输入数组:
$ readarray -tn3 var
a
b c
d e
$ for v in "${var[@]}"; do echo "|$v|"; done
|a|
|b c|
|d e|
Run Code Online (Sandbox Code Playgroud)
-n3将输入限制为三行。 -t告诉 readarray 丢弃换行符。