在shell脚本中使用for循环遍历参数列表?

我想通过参数显示提供给我的shell脚本的文件的内容。 我需要使用普通的'for(())'循环来做这个,而不是'for arr'循环。

这是我的代码。 我应该如何正确的文件名称为该猫命令?

for (( i=1;$i<=$#;i=$i+2 )) do cat '$'$i #display the contents of the file currently being traversed done 

你可以使用像这样的东西:

 for (( i=1;$i<=$#;i=$i+1 )) do cat ${!i} #display the contents of the file currently being traversed done 

相应的手册部分:

如果参数的第一个字符是感叹号,则引入一个变量间接级别。 Bash使用由其余参数形成的变量的值作为变量的名称; 这个变量然后被展开,并且该值被用在其余的替换中,而不是参数本身的值。 这被称为间接扩张。 例外情况是下面描述的$ {!prefix *}和$ {!name [@]}的扩展。 为了引入间接性,感叹号必须紧跟左括号。

for循环的正常行为是迭代参数。 遍历所有参数:

 #!/bin/sh -e for x; do cat $x; done 

你可以稍微修改一下,就像在你的例子中用许多不同的方法一样,只对其他参数进行操作。 一种可能性是:

 for x; do expr $(( i++ )) % 2 > /dev/null || cat "$x"; done 

如果你坚持使用非标准形式,你可以使用在大多数shell中将会失败的$ {!var} bashism,或者你可以使用eval

 for (( i = 1; i <= $#; i += 2 )) do eval cat '"$'$i\" done