如何在shell中迭代命令行参数?

时间:2013-10-30 11:10:03

标签: shell unix

我在执行以下程序时遇到问题。我需要从命令行读取输入并将其作为输出打印出来。 每次运行时命令行参数的数量会有所不同。请帮忙。

for ((c = 1 ; c <= $# ; c++))
  do
   echo "I got you"
   echo $($c)
  done

3 个答案:

答案 0 :(得分:3)

只需使用

 #!/bin/sh
 printf 'Number of args: %d\n' $#
 printf 'Args are:\n'
 printf '<%s>\n' "$@"

也适用于shell函数。如果你需要迭代,

 for arg in "$@"; do
    something with $arg
 done

答案 1 :(得分:1)

Jens为您提供正确的答案。您的方法可以使用variable indirection

set -- a b c d e

for (( c = 1; c <= $#; c++ )); do
    echo "\$$c = ${!c}"
done
$1 = a
$2 = b
$3 = c
$4 = d
$5 = e

答案 2 :(得分:0)

这是一个简单的bash脚本,myscript输出如下所示 ./cmdArgs.sh num1 num2 num3 num4 我接到你了 NUM1 我接到你了 NUM2 我接到你了 NUM3 我接到你了 num4

#!/bin/bash
while [ $# != 0 ]
do
echo "I got you"
echo "$1"
shift
done