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準拠のシェルで機能します。

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

sh ではなく #!/bin/bash を試しましたか?

違いを説明するリンクは次のとおりです

于 2012-06-21T21:53:20.733 に答える
1

これは、shまたはbash:のいずれかで機能します

for arg
do
    echo "$arg"
done

そしてそれはあなたのスクリプトが引数リストを破壊することなくすることを意図しているのと同じことをします。

于 2012-06-21T22:09:04.857 に答える