在 bash shell 脚本中,编写一个遍历字符串值的 for 循环

And*_*rew 28 bash shell-script for

在 bash 中,我知道可以编写一个for循环,其中一些循环控制变量i迭代指定的整数。例如,我可以编写一个 bash shell 脚本来打印 1 到 10 之间的整数:

#!/bin/bash

for i in {1..10}
do
 echo $i
done
Run Code Online (Sandbox Code Playgroud)

如果我提供字符串列表,是否可以迭代作为字符串的循环控制变量?例如,假设我有一个fname表示文件名的字符串。我想为每个文件名调用一组命令。例如,我可能想fname使用这样的命令打印内容:

#!/bin/bash

for fname in {"a.txt", "b.txt", "c.txt"}
do
 echo $fname
done
Run Code Online (Sandbox Code Playgroud)

换句话说,在第一次迭代时,fname应该有 value fname="a.txt",而在第二次迭代时,fname应该有 value fname="b.txt",依此类推。不幸的是,上面的语法似乎不太正确。我想获得输出:

一个.txt

b.txt

文件

但是当我尝试上面的代码时,我得到了这个输出:

{a.txt,

b.txt,

c.txt}

你能帮我确定正确的语法,以便我可以迭代地更改变量的值/内容fname吗?感谢您的时间。

Ali*_*gji 43

正确的语法如下:

#!/bin/bash

for fname in a.txt b.txt c.txt
do
  echo $fname
done
Run Code Online (Sandbox Code Playgroud)

  • 此外,假设一个名称数组`fnames=( a.txt b.txt c.txt )`,您可以使用语法`for f in ${fnames[@]}; 做回声 $f; 完成`。 (9认同)