Bashで変数に "-e"を割り当てる方法

Bashで変数に "-e"を割り当てる方法

-eBash 4で変数に割り当てようとしています。しかし、変数はまだ空です。

たとえば、

$ var="-e" 
$ echo $var

$ var='-e' 
$ echo $var

$ var="-t" 
$ echo $var
-t

なぜ動作します-tが、動作しませんか-e

答え1

動作しますが、echo -e両方のオプションを有効にしないと、Bashで実行すると何も出力されません。これはオプションとして解釈されます。posixxpg_echo-e

$ help echo
echo: echo [-neE] [arg ...]
    Write arguments to the standard output.

    Display the ARGs, separated by a single space character and followed by a
    newline, on the standard output.

    Options:
      -n        do not append a newline
      -e        enable interpretation of the following backslash escapes
      -E        explicitly suppress interpretation of backslash escapes

使用

printf "%s\n" "$var"

代わりに。

コメントで指摘したように、Bash declare -p vartypeset -p varksh、zsh、yash(bashを含む))を使用して、変数の正確な型と内容を知ることができます。

望むより:なぜprintfがechoより優れているのですか?

答え2

コマンド(たとえば、あなたの場合echo)はコマンドライン引数を使用し、これはフラグ(-eあなたの場合)です。多くのコマンド(少なくとも一般的なLinuxバージョン)は--(2つのハイフン)を「フラグの終わりであり、次の内容は一般的なパラメータ」として理解しています。したがって、異常に名前の付いた-rファイルを削除できますrm -- -r

コンテンツを表示するのがより強力です(使いにくい場合)printf

関連情報