gpt4 book ai didi

Bash for循环如何用空格解决变量?

转载 作者:行者123 更新时间:2023-11-29 09:47:22 27 4
gpt4 key购买 nike

在某些情况下,引号可以解决包含空格的参数。

$ command "param 1" "param 2" ...

它也可以用于 for 循环。

$ for v in a "b c" "d e"
do
echo "|$v|"
done
|a|
|b c|
|d e|

但是当我在 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"|

它不起作用。我该如何解决这个问题?

最佳答案

这就是发明数组的原因:

$ var=(a "b c" "d e")
$ for v in "${var[@]}"; do echo "|$v|"; done
|a|
|b c|
|d e|

讨论

考虑:

var='a "b c" "d e"'

上面的问题是,一旦你引用了一个引语,它就失去了它的魔力。上面单引号字符串中的双引号是字符,就像任何其他字符一样:它们不再将任何东西绑定(bind)在一起。这就是输出看起来像这样的原因:

|a|
|"b|
|c"|
|"d|
|e"|

从终端读取数组

可以使用 readarray 以换行符分隔的形式输入数组:

$ readarray -tn3 var
a
b c
d e
$ for v in "${var[@]}"; do echo "|$v|"; done
|a|
|b c|
|d e|

-n3 将输入限制为三行。 -t 告诉 readarray 丢弃换行符。

关于Bash for循环如何用空格解决变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29689635/

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