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

Linux 在shell脚本中使用for循环遍历参数列表?,linux,shell,scripting,parameters,cat,Linux,Shell,Scripting,Parameters,Cat,我想通过参数显示提供给shell脚本的文件的内容。我需要使用正常的“for”循环,而不是“for x in arr”循环 这是我的密码。我应该如何正确地输入cat命令的文件名 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

我想通过参数显示提供给shell脚本的文件的内容。我需要使用正常的“for”循环,而不是“for x in arr”循环

这是我的密码。我应该如何正确地输入cat命令的文件名

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 (( 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
如果坚持使用非标准表单,那么可以使用${!var}bash主义,这在绝大多数shell中都会失败,也可以使用eval


for循环的正常行为是迭代参数。要迭代所有参数,请执行以下操作:

#!/bin/sh -e
for x; do cat $x; done
您可以稍微修改它,以便只对其他每个参数进行操作,就像您在示例中以许多不同的方式所做的那样。一种可能性是:

for x; do expr $(( i++ )) % 2 > /dev/null || cat "$x"; done
如果坚持使用非标准表单,那么可以使用${!var}bash主义,这在绝大多数shell中都会失败,也可以使用eval


什么是正常的?使用另一种形式更为常见。正常情况下使用哪种形式?使用另一种形式更为常见。