readlinkリテラルと変数

readlinkリテラルと変数

BASHの使用:答えは明らかですが、私には効果がありません。

> echo $PWD
/root/fcm
> readlink -f ~
/root
> # but then with a variable or literal
> a='~'
> readlink -f $a
/root/fcm/~
> readlink -f "~"
/root/fcm/~


bashやreadlinkを置き換える人は '/root/'だけを受け取ると予想されます。

答え1

シェルはチルダ拡張を実行します。readlinkいいえ。Bashは引用符の中にチルダを拡張しません。

readlink -f $a変数拡張の前にチルダ拡張が行われるため、目的の操作は実行されません。つまり、変数はに拡張されますが、~チルダはもはや拡張されません。

Bashが操作を実行する順序は、中括弧拡張、チルダ拡張、パラメータおよび変数拡張、コマンド置換、算術拡張、トークン化、パス名拡張です。

場合によっては、$HOMEチルダを使用することは他の変数のように動作するため、チルダを使用するよりも優れている可能性があります。

また、rootとしてログインしないでください...

関連情報