传入bash脚本的参数

时间:2012-06-21 21:45:39

标签: bash arguments shift

我有跟随bash脚本为脚本的每个参数做一些事情

#! /bin/sh

while (($#)); do
 echo $1
 shift
done

但不知何故,如果我用命令sudo ./test.sh foo1 foo2启动它,它就不会工作。真正奇怪的是,如果我输入sudo bash test.sh foo1 foo2它就有效。有人知道导致这种奇怪行为的原因吗?

3 个答案:

答案 0 :(得分:3)

您已指定/ bin / sh作为您的解释器,这可能不是bash。即使它是bash,bash在调用/ bin / sh时也会以POSIX模式运行。

(( ))命令是特定于bash的功能。以下内容适用于任何符合POSIX标准的shell:

while [ $# -gt 0 ]; do
   echo $1
   shift
done

答案 1 :(得分:2)

你试过#!/ bin / bash而不是sh?

这是一个解释差异的链接: http://www.linuxquestions.org/questions/programming-9/difference-between-bin-bash-and-bin-sh-693231/

答案 2 :(得分:1)

这适用于shbash

for arg
do
    echo "$arg"
done

并且它与您的脚本在不破坏参数列表的情况下执行相同的操作。