如何实现Bash脚本执行以参数形式传入的指定命令?
解决Bash脚本精准执行传入命令的问题
正确的args脚本代码如下:
#!/bin/bash set -x "$@"
问题原因与解决方案说明
- 你之前使用
$*或未加引号的$@时,Bash会触发单词拆分和路径名扩展两个机制:- 单词拆分会把参数中的连续多空格合并成单个空格,导致输出时空格丢失;
- 路径名扩展会解析
*这类通配符,尝试匹配当前目录下的文件(若存在匹配项会直接替换为文件名列表)。
- 给
$@加上双引号"$@"后,Bash会严格保留每个参数的原始格式:- 每个参数作为独立整体传递,不会拆分内部的空格;
- 通配符不会被展开,保持原始字符串形态。
验证执行结果
执行./args echo 'foobar *0x0'后,会输出:
+ echo 'foobar *0x0' foobar *0x0
完全符合你期望的精准执行效果。
内容的提问来源于stack exchange,提问作者Mark Galeck
相关产品推荐
相关产品推荐

