2017-02-08 9 views
0

失敗したテストを再現するためのbashスクリプトを作成しようとしています。印刷しbash引用符は中括弧{}でどのように動作しますか?

元のコマンドをされた(たとえば、我々がテストしているエコー)

echo aa @p{0,1}=port bb 

aa @p0=port @p1=port bb 

は、私は、変数

TESTCASE='aa @p{0,1}=port bb' 

で引数を持っている私ので、コマンドラインを構築する

その後、

${CMD} 

それを実行し、私が手:

aa @p{0,1}=port bb 

彼らは、コマンドラインで

何が起こっているのと同じよう中括弧は展開されませんIEとどうすれば修正できますか?

+1

'のeval $欲しい何を得るでしょう見ますCMDはあなたが望むものを手に入れます – Aserre

+4

'bash'に' @ '演算子はありません。 – chepner

+2

'brace expansion'の詳細はこちらhttp://wiki.bash-hackers.org/syntax/expansion/brace – Inian

答えて

-1
+0

中括弧拡張を取得するためだけに 'eval'を使用しません。 – chepner

+0

なぜですか?それは私が入力したかのようにコマンドを実行することです、私が望むものを正確に行うようです。 –

7

通常のパラメータではなく、複数の引数を格納する配列を使用します。カッコ内の文字列には、配列パラメータの値を設定する前にブレース拡張が適用されます。

test_case=(aa @p{0,1}=port bb) 

通常のパラメータではなくコードを格納する関数を使用します。

ブレース展開は変数置換の前に行われます:組み合わせAserreとグレン・ジャックマンのコメントから

cmd() { 
    echo "${test_case[@]}" 
} 
関連する問題