这是我的问题.在bash 3:
$test='One "This is two" Three' $set -- $test $echo $2 "This
如何获取bash以了解引号并返回$2,因为这是两个而不是“这个?不幸的是,我不能在这个例子中改变名为test的变量的构造.
原因是由于shell解析命令行的顺序:它解析(并删除)引号和转义,然后替换变量值.当$test被替换为“这是两个”的三个时候,报价已经太晚了.
简单(但危险)的方法是通过添加另一个级别的解析与eval:
$test='One "This is two" Three' $eval "set -- $test" $echo "$2" This is two
(请注意,echo命令中的引号不是必需的,但是是一个很好的一般做法)
我说这是危险的原因是它不只是返回并重新引用引用的字符串,它可以追溯到一切,也许包括你不想解释的命令替换的东西.假设你已经设置好了
$test='One `rm /some/important/file` Three'
… eval将实际运行rm命令.所以如果你不能指望$test的内容是“安全的”,不要使用这个结构.
BTW,这样做的正确方法是使用数组:
$test=(One "This is two" Three) $set -- "${test[@]}" $echo "$2" This is two
不幸的是,这需要控制变量的创建方式.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。