ダッシュで始まるCLIパラメータで使用すると、チルダ(〜)が拡張されないのはなぜですか?

ダッシュで始まるCLIパラメータで使用すると、チルダ(〜)が拡張されないのはなぜですか?

VNCサーバー(x0vncserver)を実行しようとして数時間を費やしましたが、クライアントは奇妙なメッセージで接続を拒否しました。

No password configured for VNC Auth

サーバーもこのエラーを印刷します。

 SVncAuth:    opening password file '~/.vnc/passwd' failed

まあ、私はチルダがシェルやx0vncserverによって拡張されないことに気づくまで多くの時間を無駄にしました。その後、このテストを実行しました。

$ echo --PasswordFile=~/.vnc/passwd
--PasswordFile=~/.vnc/passwd

しかし、

$ echo PasswordFile=~/.vnc/passwd
PasswordFile=/home/tichomir/.vnc/passwd

なぜそんなことですか?引数がダッシュで始まる場合、シェルがチルダ拡張を拒否するのはなぜですか?チルダは、引用されない限り常に拡張されると思いましたが、明らかに別の規則があるようです。

ベストアンサー1

bashこれはシェルのマニュアルに記載されている機能です。

単語が単純なコマンドの引数として表示されると、Bashは変数の割り当て条件を満たす単語のチルダ拡張も実行します(上記の引数で説明したように)。 posixモードでは、Bashは上記の宣言コマンドを除いてこれを行いません。

これは意味するbash 〜するチルダは変数割り当てのように見えるパラメータPasswordFile=~/.vnc/passwdなので、文字列からチルダを展開してください。echo

文字列は有効な変数名ではない--PasswordFile=~/.vnc/passwdため、変数の割り当てのようには見えません。--PasswordFile

POSIXモードで実行すると、これは実行されず、orなどの他のシェルはデフォルトでbashこれをzsh実行しません(ただし、引用符で囲まれていない等号()の数字拡張子の後にチルダを実行するオプションがあります)。kshyashzshmagicequalsubst=

現在のユーザーのホームディレクトリパスがコマンド引数の一部に正しく拡張されていることを確認するには、チルダの$HOME代わりに次の値を使用します。

echo --PasswordFile="$HOME/.vnc/passwd"

マニュアルに記載されている「上記のステートメントコマンド」は、組み込みコマンド、、、、、aliasおよびです。declaretypesetexportreadonlylocal

おすすめ記事