0

私は初心者の Linux ユーザーで、この問題に遭遇しました。

以下のコマンドを実行した場合

set 10 20 30 40 50
shift
shift 

の値をどのように見つけます$*か?

4

3 に答える 3

2

の値を見つける最も簡単な方法$*は、エコーすることです。

echo $*

示されている 3 つの手順を考えると、次のようにエコーされます。

30 40 50

引用符なしの値は$*、引用符なしの値と同じであり$@、シェルスクリプトへのすべての位置引数、またはset示したようなコマンドによって設定された値 (後続のshiftコマンドによって変更されたもの) で構成されます。それらを二重引用符で囲む"$*"と、すべての位置パラメーターを含む単一の文字列を表しますが"$@"、それぞれが位置パラメーターと同一の多数の文字列を表します。より一般的に正しいフォームです。

printf次のコマンドを使用して、これらの形式の違いを確認できます。

printf "%s\n"  $*
printf "%s\n" "$*"
printf "%s\n"  $@
printf "%s\n" "$@"

以下を使用すると、それらについてより多くの洞察が得られます。

set -- 10 '20 30' '  40  50  '

シフトなしで、4 つのprintfコマンドを使用しました。

printf "X%sX\n"  $*
printf "X%sX\n" "$*"
printf "X%sX\n"  $@
printf "X%sX\n" "$@"

X は、出力される値の開始と終了をマークするのに役立ちます。出力は次のとおりです。

X10X
X20X
X30X
X40X
X50X
X10 20 30   40  50  X
X10X
X20X
X30X
X40X
X50X
X10X
X20 30X
X  40  50  X

Bash マニュアルの関連セクションは、特殊なパラメーターです。

于 2013-07-20T05:25:52.903 に答える
0

その少し奇妙です ..... 質問は、 $* の値 ...... まあ、それはコマンドに入れられたすべてのものを表し、したがって位置パラメータに渡されました。

シフトコマンドは、元のコマンドラインにあったすべてのものを1つ左にプッシュします....したがって、10 20 30 40 50 ..... 2回のサシフト(左に2回押す)の後、30 40 50になります$1 ... $2 のような $ で位置/出現を指定することでアクセスできるようになりました

$ set 10 20 30 40 50
$ shift 2
$ echo $*
30 40 50

簡単に言えば ....

個々の値にアクセスしたい場合.... $1 、 $2 .... を使用するだけです。ここでは、$1 は 30 になり、$2 は 40 になります。

$# を使用しているパラメーターの数を知りたい

$ echo $#
 3

これは役に立ちますか?

于 2013-07-20T05:23:22.590 に答える
0

bashマニュアルページから:

set: オプションが処理された後に残っている引数は、位置パラメータの値として扱われ、$1$2、 ... に順番に割り当てられます$n

と:

shift [n]: The positional parameters from n+1 ...are renamed to $1 .... Parameters associated by the numbers $#down to $#-n+1are unset...nが指定されていない場合は、1 と見なされます。

だからあなたのsetセット:

$1 = 10
$2 = 20
$3 = 30
$4 = 40
$5 = 50

そして、shiftコマンドは他の変数を 1 つずつ破棄し$1てシャッフルします。$nこれを 2 回行うと、次のようになります。

$1 = 30
$2 = 40
$3 = 50

echo $*次を使用して、出力を確認できます。

30 40 50
于 2013-07-20T05:18:43.137 に答える