我需要传递更多原始参数,并且我还想添加一些其他参数。像这样的事情:
#!/bin/bash
params="-D FOREGROUND"
params+=" -c Include conf/dev.conf"
/usr/local/apache/bin/apachectl $params "$@"
如果 params
包含两个或多个参数(将其视为一个参数),则上述代码将无法按预期工作。
最佳答案
如果在完全按照如下方式编写的命令行中执行以下命令时有效,则示例中的代码应该可以工作:
/usr/local/apache/bin/apachectl -D FOREGROUND -c Include conf/dev.conf "$@"
快速的网络搜索让我认为您想要的是这个(注意额外的双引号):
/usr/local/apache/bin/apachectl -D FOREGROUND -c "Include conf/dev.conf" "$@"
以下是如何使用数组简单可靠地实现这一点,从而避免“在引号内引用”问题:
#!/bin/bash
declare -a params=()
params+=(-D FOREGROUND)
params+=(-c "Include conf/dev.conf")
/usr/local/apache/bin/apachectl "${params[@]}" "$@"
params
数组包含 4 个字符串("-D"
、"FOREGROUND"
、"-c"
> 和“包含conf/dev/conf”
)。数组扩展("${params[@]}"
,请注意,双引号在这里很重要)将它们扩展为这 4 个字符串,就好像您用双引号将它们写入一样(即无需进一步分词)。
使用具有这种扩展的数组是一种灵活可靠的方式来构建命令,然后通过简单的扩展来执行它们。
关于bash - 追加 bash 参数并转发给其他脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42175159/