小编Wil*_*ger的帖子

变量扩展中缺少引号删除和转义背后的想法是什么?

命令可以存储在变量中并在 shell 中执行(尽管不是一个好的做法),例如:

command='ls -l A* "B\" type"'
$command
Run Code Online (Sandbox Code Playgroud)

A它列出了以、"B\"和开头的文件type"。执行参数分隔和通配符,但不删除引号和转义。这种行为使得在不支持数组的 shell 中使用一个变量传递任意参数非常困难,并且不可能安全地组合find其他命令for(这经常被讨论)。它甚至限制了通配符的使用,因为许多字符在未加引号的变量扩展中不受控制(您无法存储包含 `'"*?\n文字的通配符序列并正确重用它们)。

如果可以处理变量中的引号和转义序列,情况将会非常不同。但为什么大多数 shell 实际上不这样做呢?它是专门设计的,有一些我没有注意到的晦涩的考虑,还是只是简单地传承下来以保持兼容性?我知道有类似的问题,例如Why does bashvariableexpansionretainquotes? “变量中的命令”中的引用/转义/扩展问题讨论了行为,但那里的答案没有谈论原因。

shell shell-script variable

8
推荐指数
2
解决办法
529
查看次数

标签 统计

shell ×1

shell-script ×1

variable ×1