0

私は Linux の初心者で、シェル スクリプトを学習していますが、位置パラメーターを理解するのに苦労しています。最初にターミナルに次のように入力しました。

set this is a great place

そして私は実行します:

echo $1

それが示している:

this

次に、シェルスクリプトファイルtest.shで何かを試しました:

#!/bash/sh
echo $1

ターミナルでシェルスクリプトを実行します。

sh test.sh

それは何も示していません。そして、私が実行した場合:

sh test.sh hello

画面にこんにちはと表示されます。しかし、私が実行した場合:

echo $1

ターミナルコマンドラインで。それはまだこれを示しています

$1 の値が 2 つの場所で異なるのはなぜですか?

4

2 に答える 2

0

Pl。この説明が役立つかどうかを確認してください。

ここで 2 つのプロセスを考えることができます。1 つは変数のセットを持つ現在のシェルです。

入力すると、

set this is a great place 

現在のシェルの変数が更新されます。

今あなたが入力するとき

sh test.sh  

これは、独自の変数セットを持つ別のプロセスが存在することを意味します。これら 2 つの変数セットは同じではありません。したがって、この場合、別の出力が得られます。

Apple が提供する非常によく書かれたシェル スクリプト チュートリアルの 1 つを以下に示します。

https://developer.apple.com/library/mac/#documentation/opensource/conceptual/shellscripting/Introduction/Introduction.html

于 2012-07-05T06:45:26.010 に答える
0

$1 ($2 など) は、現在のシェル(またはシェル スクリプト)への引数です。

set ビルトインは、現在の引数のセットを新しいものに置き換えます。

% cat test.sh
#!/bash/sh
echo $1
set X Y Z
echo $1

# No args given, so $1 will start set to A, set will change it to X
% sh test.sh

X
# Args given, $1 will start set to A, set will change it to X
% sh test.sh A B C
A
X
于 2012-07-05T06:35:23.903 に答える