noe*_*oes 1 bash loops brace-expansion
我想编写一个for循环,其中可能的值来自另一个变量。我不知道的部分是如何包括需要括号扩展的值。例如:
TEXT="a b c d{a..c} e f"
for VAR in $TEXT; do echo $VAR; done
Run Code Online (Sandbox Code Playgroud)
我得到的是
a
b
c
d{a..c}
e
f
Run Code Online (Sandbox Code Playgroud)
但是我想要的是
a
b
c
da
db
dc
e
f
Run Code Online (Sandbox Code Playgroud)
有谁知道我该怎么做?
非常感谢你!
我担心eval在这种情况下您可能不得不诉诸使用...但是,我建议您避免使用循环:
eval "printf '%s\n' $TEXT"
Run Code Online (Sandbox Code Playgroud)
使用eval意味着括号将被扩展,从而产生所需的结果。
您可以使用查看发生的情况set -x:
$ set -x
$ eval "printf '%s\n' $TEXT"
+ eval 'printf '\''%s\n'\'' a b c d{a..c} e f'
++ printf '%s\n' a b c da db dc e f
a
b
c
da
db
dc
e
f
Run Code Online (Sandbox Code Playgroud)
请注意,展开发生在列表作为参数传递给之前printf。
如果您要定义$TEXT自己并想遍历每个扩展元素,建议使用数组代替:
text=( a b c d{a..c} e f )
for var in "${text[@]}"; do
# whatever with "$var"
done
Run Code Online (Sandbox Code Playgroud)
这是首选解决方案,因为它不涉及使用eval。
| 归档时间: |
|
| 查看次数: |
1041 次 |
| 最近记录: |