1

これは簡単だと思います。ive' は多くの可能性を試しましたが、うまくいきませんでした。

シェルで以下を実行しようとしています。

 ./secondexecutable -t "A string with spaces" -s "Another string with spaces" -o outfile.txt

問題は、実行可能ファイルが 1 つの実行可能ファイルから文字列を取得し、2 番目の実行可能ファイルに適用することです。2 番目の実行可能ファイルには、スペースを保持するために引用符 (一重または二重) が必要です。

tmp=`./firstexecutable`

echo $tmp   prints out the following     -t "A string with spaces" -s "Another string with spaces"


./secondexecutable $tmp -o outfile.txt

シェルは引数を切り捨てるので、基本的には類似しています

 ./secondexecutable -t "A" -s "Another" -o outfile.txt
4

2 に答える 2

2

スクリプト内の変数を引用符で囲みます。

./secondexecutable "$tmp" -o outfile.txt

引用符を使用する場合と使用しない場合は、次のようになります。

$ cat countargs 
#!/bin/sh

echo $#
$ var='O HAI I IZ A VAR'
$ ./countargs $var
6
$ ./countargs "$var"
1
于 2013-01-02T22:51:18.007 に答える
0

私の意見では、これはひどいデザインです。スペースを含む複数の文字列を単一の文字列に連結すると、元に戻らずにそれらを分離する簡単な方法はありません。eval

eval ./secondexecutable "$tmp" -o outfile.txt

それを行うかもしれませんが、任意の文字列を評価するリスクに注意してください


可能であれば、最初の実行可能ファイルを作り直す必要があります。-t オプションと -s オプションのを返すことができれば、作業はずっと楽になります。たとえば、次のように値を別々の行に出力することさえできれば:

A string with spaces
Another string with spaces

あなたはこれを行うことができます:

{ IFS= read -r t_option; IFS= read -r s_option; } < <(./firstexecutable)
./secondexecutable -t "$t_option" -s "$s_option" -o output.txt

または、2 つの値が何らかの形で相関していない場合は、最初の実行可能ファイルを取得して一度に 1 つずつ計算します。

./second -t "$(./first -t)" -s "$(./first -s)" -o output.txt
于 2013-01-03T01:03:15.193 に答える