スクリプトの各パラメーターに対して何かを行うために、次のbashスクリプトがあります
#! /bin/sh
while (($#)); do
echo $1
shift
done
しかし、どういうわけか、コマンドsudo ./test.sh foo1 foo2
で開始すると機能しません。そして、本当に奇妙なことは、私が入るとそれが機能するsudo bash test.sh foo1 foo2
ということです。この奇妙な行動の原因を誰かが知っていますか?
インタプリタとして/bin/ shを指定しましたが、bashではない可能性があります。bashであっても、/ bin / shとして呼び出されると、bashはPOSIXモードで実行されます。
この(( ))
コマンドはbash固有の機能です。以下は、POSIX準拠のシェルで機能します。
while [ $# -gt 0 ]; do
echo $1
shift
done
sh ではなく #!/bin/bash を試しましたか?
違いを説明するリンクは次のとおりです 。
これは、sh
またはbash
:のいずれかで機能します
for arg
do
echo "$arg"
done
そしてそれはあなたのスクリプトが引数リストを破壊することなくすることを意図しているのと同じことをします。