gpt4 book ai didi

作为选项传递时,shell 波浪号扩展不起作用

转载 作者:行者123 更新时间:2023-12-04 20:12:33 26 4
gpt4 key购买 nike

我发现波浪号扩展不适用于以下情况:

$ 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 , Shell 将在“波浪号扩展”之前拆分单词。我注意到分词实际上是不同的。结果不同的原因是什么?

最佳答案

波浪号扩展也发生在 shell 变量赋值中,即 destdir=~/test类似。 dest-dir=~/test-destdir=~/test不要,因为 -不是变量名中的有效字符。虽然 shell 没有评估 destdir=~/test作为变量赋值(如果 set -k 被使用),解析器似乎仍然如此对待它并在 RHS 上执行波浪号扩展。

来自 http://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html#Tilde-Expansion :

Each variable assignment is checked for unquoted tilde-prefixes immediately following a ‘:’ or the first ‘=’. In these cases, tilde expansion is also performed. Consequently, one may use file names with tildes in assignments to PATH, MAILPATH, and CDPATH, and the shell assigns the expanded value.



请注意,使用 -k选项集,正确的变量赋值被处理并从传递给 print_arg.pl 的参数列表中删除。 :
~ $ set -kx
~ $ ./print_arg.pl destdir=~/bin foo
+ destdir=/Users/clint/bin
+ ./print_arg.pl foo
foo
~ $ ./print_arg.pl dest-dir=~/bin foo
+ ./print_arg.pl 'dest-dir=~/bin' foo
dest-dir=~/bin

关于作为选项传递时,shell 波浪号扩展不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15493928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com