如何编写脚本来接受任意数量的命令行参数?(UNIX,BASH)

如何编写脚本来接受任意数量的命令行参数?(UNIX,BASH)

我有一个脚本,想要接受任意数量的命令行参数。

到目前为止

如果 [ -O $1 ] ; 那么
  echo“您是$1的所有者”
别的
  echo“你不是$1的所有者”

显然,如果我希望脚本只接受一个参数,那么这就可以起作用,但是对于任意数量的参数,这都可以起作用。

例如 ./script f f1 f2 f3

答案1

实现您想要的操作的一种可能方法是$@,它是传入的所有参数的数组。

for item in "$@"; do
  if [ -O "$item" ]; then
    echo "you are the owner of $item"
  else
    echo "you are not the owner of $item"
  fi
done

答案2

嗯,这取决于你到底想做什么,但请查看$*$@shift

答案3

“$@” 不能解决“任意数量的参数”的问题。命令行的长度是有限制的(http://www.in-ulm.de/~mascheck/various/argmax/)读取“无限参数”的更好方法是通过 STDIN:

prg_which_creates_arguments | while read a; do \
    echo "do something with $a"; \
done

只需创建参数,然后在对它们进行某些操作的代码中将它们一个接一个地传输出去。

答案4

这是你想要的脚本

while test -n "$1"; do
  echo $1
  shift
done

如果你输入:

script arg1 arg2 arg3 

你的输出将是

arg1
arg2
arg3

相关内容