3

このsetコマンドを使用して、位置引数 $1 $2 ... の値を変更できます。

しかし、 $0 を変更する方法はありますか?

4

3 に答える 3

1

ここに別の方法があります。これは、ソース (ドット コマンド) よりも多少優れた直接コマンド実行によって実装されます。ただし、sh は一緒に渡される -s -c オプションをサポートするため、この方法は bash ではなく、シェル インタープリターに対してのみ機能します。

#! /bin/sh
# try executing this script with several arguments to see the effect

test ".$INNERCALL" = .YES || {
    export INNERCALL=YES
    cat "$0" | /bin/sh -s -c : argv0new "$@"
    exit $?
}

printf "argv[0]=$0\n"
i=1 ; for arg in "$@" ; do printf "argv[$i]=$arg\n" ; i=`expr $i + 1` ; done

この場合の両方の例の期待される出力は次の./the_example.sh 1 2 3ようになります。

argv[0]=argv0new
argv[1]=1
argv[2]=2
argv[3]=3
于 2014-07-08T20:02:52.130 に答える