我想用一个字符串来控制bash中的for循环.我的第一个测试代码产生了我期望的和我想要的东西:
$ aa='1 2 3 4'
$ for ii in $aa; do echo $ii; done
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
我想用以下的东西代替.这不会给出我想要的输出(我可以看到它为什么会这样做).
$ aa='1..4'
$ for ii in $aa; do echo $ii; done
1..4
Run Code Online (Sandbox Code Playgroud)
有关如何修改第二个示例以提供与第一个示例相同的输出的任何建议?
提前感谢任何想法.我正在慢慢学习bash但仍有很多需要学习的东西.
麦克风
Bash 不会对变量进行大括号扩展,但您可以使用eval:
$ aa='1..4'
$ for ii in $(eval echo {$aa}); do echo $ii; done
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
您还可以拆分aa为一个数组:
IFS=. arr=($aa)
for ((ii=arr[0]; ii<arr[2]; ii++)); do echo $ii; done
Run Code Online (Sandbox Code Playgroud)
请注意,IFS只能是单个字符,因此 .. 范围将数字放入索引 0 和 2 中。