我發現波浪線擴展不適用於下列情況下工作:殼波浪線擴展不工作時,作爲一個選項傳遞
$ set -x
$ ./print_arg.pl destdir=~/test
+ ./print_arg.pl 'destdir=/root/test'
destdir=/root/test
$ ./print_arg.pl dest-dir=~/test
+ ./print_arg.pl 'dest-dir=~/test'
dest-dir=~/test
$ ./print_arg.pl -destdir=~/test
+ ./print_arg.pl '-destdir=~/test'
dest-dir=~/test
print_arg.pl的內容是
#!/usr/bin/perl
print $ARGV[0],"\n";
據Order of Shell processing ,殼牌將在「波浪擴張」之前分詞。我注意到,分詞實際上是不同的。造成不同結果的原因是什麼?
我也注意到了一句「解析器具有顯着的話作爲變量賦值(**命令名**之前的那些)和重定向保存以供以後處理。「因此,命令之後的「destdir =〜/ test」可能不會被標記爲可變賦值。那如何解釋呢? – lisper 2013-03-19 16:13:08
由於'set -k' shell選項,它*可能*是一個變量賦值。我的猜測是解析器不檢查是否設置了該選項,並標記任何可能是有效賦值的東西。解析完成後(包括代字符擴展),負責評估解析命令的代碼可以根據'set -k'檢查是否應評估命令後面的賦值。有人可能會爭辯說,在第一次識別變量賦值時忽略'set -k'是'bash'中的一個錯誤。 – chepner 2013-03-19 16:16:37
我明白了。謝謝你的非常好的解釋。 – lisper 2013-03-19 16:25:25