我有跟随bash脚本为脚本的每个参数做一些事情
#! /bin/sh
while (($#)); do
echo $1
shift
done
但不知何故,如果我用命令sudo ./test.sh foo1 foo2
启动它,它就不会工作。真正奇怪的是,如果我输入sudo bash test.sh foo1 foo2
它就有效。有人知道导致这种奇怪行为的原因吗?
答案 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)
这适用于sh
或bash
:
for arg
do
echo "$arg"
done
并且它与您的脚本在不破坏参数列表的情况下执行相同的操作。