|
1
32
为什么?当字符串被展开时,它会被拆分成单词,但不会重新计算以查找特殊字符,如引号或美元符号或。。。这是自1978年左右的伯恩壳牌(Bourne shell)以来,壳牌一直“一贯”的做法。 修复
在
或者,如果勇敢/鲁莽,使用
另一方面,谨慎往往是勇敢的最好部分,与
注意,Bash的扩展序列在 Shell Expansions 在GNU Bash手册中。请特别注意第3.5.3节Shell参数扩展、第3.5.7节单词拆分和第3.5.9节引号删除。 |
|
|
2
5
当您将引号字符放入变量中时,它们只会变成纯文本(请参见 http://mywiki.wooledge.org/BashFAQ/050 ;感谢@tripleee指出此链接) 相反,请尝试使用数组传递参数:
|
|
|
3
4
在研究这个和相关的问题时,我很惊讶没有人提到使用显式子shell。对于bash和其他现代shell,可以显式地执行命令行。在bash中,它需要-c选项。
完全符合最初提问者的要求。这种技术有两个限制:
此外,此技术还处理重定向和管道,其他外壳也可以工作。您还可以使用bash内部命令以及在命令行中工作的任何其他命令,因为您实际上是要求子shell bash将其直接解释为命令行。这里有一个更复杂的例子,一个有点复杂的l s-l变体。
我用这种方法和参数数组构建了命令处理器。一般来说,这条路 许多的 更容易编写和调试,而且回显正在执行的命令也很简单。OTOH,param数组在确实有抽象的参数数组时工作得很好,而不是仅仅需要一个简单的命令变量。 |