0

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

質問: メッセージが表示されません。解決方法を教えてください。ありがとう!

4

4 に答える 4

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

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

eval $cmd

または単に実行する

$binary --description="$description"
于 2011-08-04T07:11:04.917 に答える
0

安全な方法は、配列を使用することです:

args=("--description=test message" "--foo=some other message")
args+=("--bar=even more")
cmd "${args[@]}"
于 2011-08-04T13:52:11.750 に答える
0

目的の出力を生成する「テスト メッセージ」(名前にスペースを含む) というプログラムが実際にない限り、このバックティックは必要ありません。

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

要件を満たす最も簡単な方法は、スペースを含める必要がある引数 (の一部) を二重引用符で囲むことです。

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

最後の行を次のように書くこともできます。

$binary "--description=$description"

これにより、description 内のすべての資料が単一の引数、空白、およびすべてとして扱われることが保証されます。

于 2011-08-04T07:21:43.407 に答える
0

bash、ksh、または配列を含むシェルを使用している場合、それらはコマンドを作成する最も安全な方法です。バッシュの場合:

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

次のようなものでテストできます。これは「arg_echoer.sh」という名前だとします。

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

次に、の場合binary=./arg_echoer.sh、この出力を次のように取得します"${cmd[@]}"

./arg_echoer.sh
1: --description=test message
于 2011-08-04T12:28:41.237 に答える