bash - 追加 bash 参数并转发给其他脚本

标签 bash apache shell

我需要传递更多原始参数,并且我还想添加一些其他参数。像这样的事情:

#!/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/

相关文章:

shell - zsh 内置的 "where"的目的是什么?

bash - 捕获 stderr,但不捕获 stdout

linux - 在 Linux 上,为什么 'echo' 不能使用 ANSI 颜色代码而 'print' 可以?

linux - 匹配 bash case 语句中的字符串并查找当前无线网络

通过 RVM 的 Ruby 失败

java - 在 Maven 项目中使用 Apache POI 运行 .jar 文件

macos - 在 Mac 上的 XAMPP 上设置虚拟主机

bash - 编写 bash 脚本来读取、比较和验证外部 IP 地址。需要帮忙

bash - 使用 shell 脚本的内容创建文件

启用 SSL 后 Apache James 未收到来自外部发件人的电子邮件