二重引用符の中でチルダ(〜)が拡張されないのはなぜですか?

二重引用符の中でチルダ(〜)が拡張されないのはなぜですか?

~によるとこの回答私自身の理解によると、チルダはホームディレクトリに展開されます。

$ echo ~
/home/braiam

シェル拡張が機能したいときはいつでも(たとえば、変数名を使用し、$FOO予期しない文字、スペースなどによって中断されない)、二重引用符を使用する必要があります"

$ FOO="some string with spaces"
$ BAR="echo $FOO"
$ echo $BAR
echo some string with spaces

この拡張機能がチルダで機能しないのはなぜですか?

$ echo ~/some/path
/home/braiam/some/path
$ echo "~/some/path"
~/some/path

ベストアンサー1

その理由は、二重引用符内のチルダは~特別な意味がないため、リテラルとして扱われるからです。

POSIXの定義二重引用符ように:

二重引用符( "")で囲まれた文字は、ドル記号、バックティック、およびバックスラッシュ文字を除いて、二重引用符内のすべての文字のリテラル値を保持します。

...

アプリケーションでは、二重引用符の前にバックスラッシュがあり、その中に二重引用符があることを確認する必要があります。パラメータ「@」は二重引用符の中で特別な意味を持ちます。

$と以外の文字は二重引用符内のリテラルとして扱われ`ます。\@

おすすめ記事