2017-02-11 12 views
2

さらに元のパラメータを渡す必要がありますが、他にもいくつか追加したいと思います。このような何か:予想通りbashパラメータを追加して他のスクリプトに転送

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

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

上記のこのコードはparamsが二つ以上のパラメータを含んでいる場合、それは一つのパラメータとして扱わ動作しません。

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

迅速なウェブ検索は何がしたいことは、この(であることを考えるように私をリード:まさに、このように書かれたコマンドラインで実行する場合は、次のコマンドが有効であれば、あなたの例では

+0

私は私の質問を編集しました。 'params'は単一のパラメータとして扱われます – SLY

+0

上記の例では、' params'を2つのパラメータ+いくつかの$ @パラメータ – SLY

答えて

4

コードは動作するはずです)追加の二重引用符に注意してください:ここで

/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配列には、4つの文字列("-D","FOREGROUND","-c"および"Include conf/dev/conf")が含まれています。配列展開("${params[@]}"、ここでは二重引用符が重要です)は、それらを囲む二重引用符で囲まれたように(つまり、それ以上の単語分割をせずに)これら4つの文字列に展開します。

このような種類の配列を使用すると、コマンドを作成して単純な拡張で実行するための柔軟で信頼できる方法です。

0

パラメータ "-c Include conf/dev.conf"のスペースに問題がある場合は、スペース文字を保存するためにバックスペースを使用できます。 params + = " - c Include \ conf/dev.conf"

関連する問題