2017-02-11 54 views
2

我需要传递更多的原始参数,我也想添加其他一些参数。事情是这样的:追加bash参数并传递给其他脚本

#!/bin/bash 
params="-D FOREGROUND" 
params+=" -c Include conf/dev.conf" 

/usr/local/apache/bin/apachectl $params "[email protected]" 

这上面的代码按预期如果params包含两个或多个参数不工作,它视为一个参数。

+0

我编辑了我的问题。 'params'作为单个参数对待 – SLY

+0

在上面的例子中,我希望'params'被视为两个参数+一些$ @参数 – SLY

回答

4

如果当正好写成这样在命令行中执行下面的命令是有效的在您的示例代码应工作:

/usr/local/apache/bin/apachectl -D FOREGROUND -c Include conf/dev.conf "[email protected]" 

快速的Web搜索使我认为,你想要的是这个(注意附加双引号):

/usr/local/apache/bin/apachectl -D FOREGROUND -c "Include conf/dev.conf" "[email protected]" 

这里是如何做到这一点简单,可靠地使用数组,在回避“引号里的引用”问题的方式:

#!/bin/bash 
declare -a params=() 
params+=(-D FOREGROUND) 
params+=(-c "Include conf/dev.conf") 

/usr/local/apache/bin/apachectl "${params[@]}" "[email protected]" 

params array包含4个字符串("-D""FOREGROUND""-c""Include conf/dev/conf")。数组扩展("${params[@]}",注意双引号在这里很重要)将它们扩展为这4个字符串,就好像你用双引号将它们写在它们周围(即没有进一步的字分割)。

使用这种扩展的数组是一种灵活可靠的方式来构建命令,然后通过简单的扩展来执行它们。

0

如果问题是参数“-c Include conf/dev.conf”中的空格,那么您可以使用退格键来保留空格字符: params + =“ - c Include \ conf/dev.conf”