bashマニュアルのチルダ拡張について:
もし一言引用符のないチルダ文字(「〜」)で始まり、引用符のない最初のスラッシュまでのすべての文字(または引用符なしのスラッシュがない場合はすべての文字)は、チルダプレフィックスとして扱われます。
~
なぜチルダプレフィックスとして認識されるのか知りたいです。
$ mypath=/program_files:~/home/t
$ echo $mypath
/program_files:/home/t/home/t
mypath=/program_files:~/home/t
bashの語彙アナライザはどの単語を何に分割しますか?~/home/t
言葉で正確に認識されますか?
bashの語彙アナライザは、コマンドを単語に分割するためにどの単語区切り文字を使用しますか?単語区切り記号:
ですか=
?それも言いますか?
ありがとうございます。
これは私の理解力の欠如から始まります。https://unix.stackexchange.com/a/448469/674
PATH文字列内のチルダ文字を理解できません。これが、POSIX標準でシェルマクロを割り当てるときにコマンドラインでコロンの後にチルダシーケンスを拡張する必要がある理由です。
ベストアンサー1
これは単語分割(より正確にはトークン分割)の結果ではありませんが、チルダ拡張変数の割り当てでは:
各変数の割り当ては、「:」または最初の「=」の直後に引用符で囲まれていないチルダプレフィックスがあることを確認します。そのような場合、チルダ拡張も実行されます。
Bashがコマンドをトークンに分割するときにBashが使用する単語区切り文字は、メタ文字:
引用符がない場合、単語を区切るために使用される文字です。メタ文字は、スペース、タブ、改行、または「|」、「&」、「;」、「(」、「)」、「<」または「>」文字のいずれかです。
mypath=/program_files:~/home/t
Bashの観点から見ると、これは単一のタグです。