CD〜可能ですが、なぜcd〜"$USER"またはcd〜${USER}を実行できないのですか?

CD〜可能ですが、なぜcd〜

ユーザーのホームディレクトリに切り替えることができない理由は疑問です。

$ cd ~"$USER"

または

$ cd ~${USER}

ベストアンサー1

これは、シェルとそのシェル内で拡張が実行される順序によって大きく異なります。

~$user$usercsh(この機能のソース)、AT&T ksh、zsh、fishに名前が格納されている~userユーザーのホームディレクトリに展開されます。

ただし、次の変更に注意してください。

$ u=daemon/xxx csh -c 'echo ~$u'
/usr/sbin/xxx  # same in zsh/fish
$ u=daemon/xxx ksh93 -c 'echo ~$u'
~daemon/xxx

$ u=daemon/xxx csh -c 'echo ~"$u"'
Unknown user: daemon/xxx.
$ u=daemon/xxx zsh -c 'echo ~"$u"'
/usr/sbin/x  # same in fish

$ u=" daemon" csh -c 'echo ~$u'
/home/stephane daemon
$ u=" daemon" zsh -c 'echo ~$u'
~ daemon  # same in ksh/fish

$ u="/daemon"  csh -c 'echo ~$u'
/home/stephane/daemon  # same in zsh
$ u="/daemon"  fish -c 'echo ~$u'
~/daemon  # same in ksh

$user文字通り、名前が指定されたユーザーのホームディレクトリに展開されますbash(ユーザーが存在すると仮定すると、もちろんそうではありません)。

そしてpdkshdashどちらもありませんyash。おそらく、$user有効なユーザー名とは見なされないからです。

おすすめ記事