我想通过参数显示提供给我的shell脚本的文件的内容。我需要使用普通的'for(())'循环而不是'for ar in arr'循环。
这是我的代码。我该如何为该cat命令正确放置文件名?
for (( i=1;$i<=$#;i=$i+2 ))
do
cat '$'$i #display the contents of the file currently being traversed
done
答案 0 :(得分:2)
您可以使用以下内容:
for (( i=1;$i<=$#;i=$i+1 ))
do
cat ${!i} #display the contents of the file currently being traversed
done
相应的手册部分:
如果参数的第一个字符是感叹号,则为级别 引入了变量间接。 Bash使用的值 由参数的其余部分形成的变量作为名称 变量;然后展开此变量,并在该变量中使用该值 其余的替换,而不是参数本身的值。 这被称为间接扩张。对此的例外是 下面描述的$ {!prefix *}和$ {!name [@]}的扩展。该 感叹号必须紧跟左支撑以便 介绍间接。
答案 1 :(得分:2)
for循环的正常行为是迭代参数。迭代所有参数:
#!/bin/sh -e
for x; do cat $x; done
您可以稍微修改它以仅对您的示例中的每个其他参数进行操作,方法有很多种。一种可能性是:
for x; do expr $(( i++ )) % 2 > /dev/null || cat "$x"; done
如果您坚持使用非标准表单,则可以使用$ {!var}基础,这将在绝大多数shell中失败,或者您可以使用eval
for (( i = 1; i <= $#; i += 2 ))
do
eval cat '"$'$i\"
done