`declare -p`の出力で `--`はどういう意味ですか?

`declare -p`の出力で `--`はどういう意味ですか?
$ declare -p ar
declare -a ar='()'


$ declare -p mmm
declare -- mmm="hello"

ここでは何を意味しますか--?その属性のいくつかを説明していますかmmm

ありがとうございます。

答え1

これは出力形式の一貫性のためだけです。最初のフィールドはtext declare、3番目のフィールドはですvar=value

したがって、特定の属性を持たない変数の場合、コマンドには「属性なし」を表示する方法が必要です。--

例えば

bash-4.2$ declare y=100
bash-4.2$ declare -p y
declare -- y="100"
bash-4.2$ declare -l y
bash-4.2$ declare -p y
declare -l y="100"
bash-4.2$ declare +l y
bash-4.2$ declare -p y
declare -- y="100"

結果はファイルに保存して後で検索できます。

答え2

デュアルダッシュは、--そのコマンドのオプションの終わりを宣言します。あなたは非常に賢い説明を見つけることができますクエンラム説明に従ってくださいこのリンク

与えられた例では、-v次のようにgrepを使用して値を見つける方法を示します。

grep -- -v inputFile

したがって、-v--invert-matchオプションはトリガーされませんが、grepは-vinputFile内の文字列を取得します。

答え3

--オプションの終わりを表示します。ここでは重複します(変数名は次から始まりません(-ユーザーのロケールが定義されている病理学的場合を除く)。-α文字クラス)ととにかくフラグがある場合は追加されませんが、無害です。コードに次のものがあるのでそこにあるようです。

printf ("declare -%s ", i ? flags : "-");

次のコマンドより速い入力速度は何ですか?

if (i)
  printf ("declare -%s ", i ? flags : "-");
else
  printf ("declare ");

皮肉なことに、bash-2.01コードは次のように変更されます。

if (pattr == 0 || posixly_correct == 0)
  printf ("declare -%s ", i ? flags : "-");
else if (i)
  printf ("%s -%s ", this_command_name, flags);
else
  printf ("%s ", this_command_name);

を避けるときとexport一緒に再使用されますが、そうではありません。readonly--export var=valuedeclare -- var=value

関連情報