0

我有以下 bash 脚本来为脚本的每个参数做一些事情

#! /bin/sh

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

但不知何故,如果我用命令启动它,sudo ./test.sh foo1 foo2它将不起作用。真正奇怪的是,如果我输入sudo bash test.sh foo1 foo2它就可以了。有谁知道是什么导致了这种奇怪的行为?

4

3 回答 3

3

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

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

while [ $# -gt 0 ]; do
   echo $1
   shift
done
于 2012-06-21T22:05:38.897 回答
2

您是否尝试过 #!/bin/bash 而不是 sh?

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

于 2012-06-21T21:53:20.733 回答
1

这将适用于shbash

for arg
do
    echo "$arg"
done

它的作用与您的脚本的作用相同,但不会破坏参数列表。

于 2012-06-21T22:09:04.857 回答