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


14

出力を何をecho $-1echo $-2echo $-3平均..?

私のLinuxボックスの1つでは、次のように表示されます。

echo $-1
imsBEl1
echo $-2
imsBEl2

また、別のLinuxボックスでは、次のように表示されます。

echo $-1
himBH1
echo $-2
himBH2

それらはいくつかのメモリ位置または他の何かにマッピングされていますか?


1
タイトルのサイドバーに次の問題があります:meta.stackexchange.com/q/229363/205964
IQAndreas

修正を試みた提案された編集を追加しましたが、すぐに、MathJaxをレンダリングするのはサイドバーのみであることに気付きました。つまり、このページにタイトルが表示されると、不要なバックスラッシュが表示されるだけです。
IQAndreas 14年

回答:


19

POSIXは次のように$-を定義しました:

-

(ハイフン)呼び出し、set組み込みコマンド、またはシェルによって暗黙的に指定された現在のオプションフラグ(文字列に連結された1文字のオプション名)に展開します。

その$-ため、シェルのベースや呼び出し方法を変えることができます。

1または2ここで分離されたトークンです。シェルがunquoteを参照$すると、パラメーター展開、コマンド置換、または算術展開の候補の開始を識別します。それを見$-て拡大し、残りは変更しませんでした。

詳細については、トークン認識セクションをご覧ください。


18

echo $-現在のシェルのオプションを表示します(-プレフィックスなし)。 1および2追加の無関係なトークンです。


11

ミロスラフの答えに追加:

echo $-現在のシェルのオプションを表示します(-プレフィックスなし)。1および2は、追加の無関係なトークンです。

これは、これらがそれぞれ各マシンのオプションであることを意味します。

imsBEl
himBH

私は各旗の意味を調査し、以下の意味をまとめました。

-私

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

-m

モニターモード。ジョブ制御が有効になっています。

-B

シェルはブレース展開を実行します(ブレース展開を参照)。これはデフォルトでオンです。

-s

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

-E

errtrace

-l

ログインシェルとして起動されたかのようにbashを動作させる

-h

ハスホール

-H履歴拡張

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


3

既存の答えに展開するには、してみてくださいecho "${-1}"echo "${-2}"-あなたが買ってあげる「バッド置換」エラーを理由というよりも、使用して-1ハイフンをするために使用される変数名として値を代入し、変数名ならば、それが前に定義されていません。例えば:

$ unset foo
$ echo "${foo-bar}"
bar
$ foo=test
$ echo "${foo-bar}"
test
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.