2011-08-04 10 views
0

a.shシェルスクリプト内のスペースを含むパラメータを外部プログラムに渡すにはどうすればよいですか?

#!/bin/bash 
description=`"test message"` # input parameter for contain a space 

binary=<external_prog> # simply display what passes to flag --description 

cmd="$binary --description=$description" 

$cmd # run the external program 

質問:メッセージはどのようにそれを解決するため、欠場しますか?ありがとう!

答えて

1
#!/bin/bash 
description="test message" 
binary=program 

cmd="$binary --description=\"$description\"" 

eval $cmd 

またはちょうどあなたが本当にあなたの所望の出力を生成します(名前にスペースを持つ)「テストメッセージ」と呼ばれるプログラムを持っていない限り、この中にバックティックは、指名手配されていない

$binary --description="$description" 
0

を実行します:

012:

description=`"test message"` # input parameter for contain a space 

あなたの条件を達成するための最も簡単な方法は、スペースが含まれている必要があり、引数(の一部)の周りに二重引用符を使用することですこれは、記述の全ての材料は、単一の引数、空白とすべてのものとして扱われることを保証

$binary "--description=$description" 

description="test message" 
binary=external_prog 
$binary --description="$description" 

あなたは同等として最後の行を書くことができます。

0

bashまたはkshまたはいくつかのシェルを使用している場合は、コマンドを作成する最も安全な方法です。 bashの場合:

description="test message" 
binary=some_prog 
cmd=("$binary" "--description=$description") 
"${cmd[@]}" 

あなたはこのようなものでそれをテストすることができます。この名前が付けられ、 "arg_echoer.sh" はbinary=./arg_echoer.sh場合、あなたは"${cmd[@]}"

./arg_echoer.sh 
1: --description=test message 
と、この出力を取得し、その後

#!/bin/sh 
echo "$0" 
i=0 
for arg in "[email protected]"; do 
    let i="$i+1" 
    echo "$i: $arg" 
done 

を言います

0

安全な方法はuse an arrayです。

args=("--description=test message" "--foo=some other message") 
args+=("--bar=even more") 
cmd "${args[@]}" 
関連する問題