echo $-1は何を示していますか?

echo $-1は何を示していますか?

echo $-1、、、echo $-2..の出力はどういうecho $-3意味ですか?

私のLinuxコンピュータの1つに次のものが表示されます。

echo $-1
imsBEl1
echo $-2
imsBEl2

他のLinuxボックスには次のものが表示されます。

echo $-1
himBH1
echo $-2
himBH2

メモリの場所や他の場所にマッピングされていますか?

答え1

POSIXの定義$-ように:

-

(ハイフン)呼び出し時には、set特殊組み込みコマンドを介して、またはシェルによって暗黙的に指定されたように、現在のオプションフラグ(文字列で連結された単一文字オプション名)に拡張されます。

したがって、$-シェルや呼び出し方法によって異なる場合があります。

1または2ここからタグを分離してください。シェルが unquote を検出すると、$パラメータ拡張、コマンド置換、または算術拡張の候補の開始を認識します。それはそれを見て$-拡張し、残りは変更せずにそのままにします。

あなたは見ることができますトークン認識セクションを参照してください。

答え2

echo $-現在のシェルのオプションを印刷します(-プレフィックスなし)。無関係な追加タグ1です2

答え3

Miroslavの回答に追加:

echo $-現在のシェルのオプションを印刷します(-プレフィックスなし)。 1と2は追加の無関係のマーカーです。

つまり、これらのオプションは各システムに個別に適用されます。

imsBEl
himBH

各記号の意味を調べてみました以下の意味はいくつかの説明でまとめられています。

-私

-i オプションがある場合、シェルは対話型です。

-中

モニターモード。ジョブ制御が有効になりました。

-雨

シェルは中括弧拡張を実行します(サポート延長ビュー)。この機能はデフォルトで有効になっています。

-S

-sオプションがある場合、またはオプション処理後に残りの引数がない場合は、標準入力からコマンドを読み取ります。このオプションを使用すると、対話型シェルを呼び出すときに位置パラメータを設定できます。

- 金利

エラー追跡

-エル

Bashがログインシェルとして呼び出されたかのように動作するようにする

- 時間

ハーシェル

-H 歴史拡張

デフォルトでは、対話型シェルではこの機能が有効になっています。

答え4

既存の回答を拡張するには試してecho "${-1}"くださいecho "${-2}"「無効な置換」エラーハイフンは-1変数名には使用されませんが、変数名には使用されません。値を置き換える変数名がある場合その前に定義されていません。たとえば、

$ unset foo
$ echo "${foo-bar}"
bar
$ foo=test
$ echo "${foo-bar}"
test

関連情報