ファイルから読み取った文字列を二重引用符で囲みます。

ファイルから読み取った文字列を二重引用符で囲みます。

Bashスクリプトは、一部の16進数を含む入力ファイルを読み込んでいます。次に、この文字列を実行可能ファイルのコマンドライン引数として渡したいと思います。

教えてください、これは私のものですtest.txt

278dca53f96014be
6c39b2d481e75f0a
38e5942f6bd0c71a

スクリプトを通して読んでいます。

i=0
while read line || [ "$line" ]; do
    arr[$i]="$line"
    i=$((i+1))
done < test.txt

max=2
for n in `seq 0 $max`
do
s=${arr[$n]}
./main -o $s
done

ご覧のとおり、数字はコマンドラインオプションとして渡されます./main

$s今問題は二重引用符の中に入れなければならないということです。私はこれを試しました:

$t='"'
$s=$t$s$t

しかし、うまくいきません。

どのように動作させるためのアイデアはありますか?

答え1

test.txtコメントを見ると、あなたのファイルがWindowsシステム上のファイルであり、DOSテキストファイルであるかのように聞こえます。に変換する必要がありますdos2unix。または、以下を修正してtr -d '\r' <test.txt | head -n 3くださいhead -n 3 test.txt


テキスト行を含むファイルがあり、main次の行の最初の3行ごとに1回ずつスクリプト/プログラムを呼び出す必要があります。

head -n 3 test.txt | xargs -n 1 main -o

もしあなたなら本物引数の一部として二重引用符が必要です(異常です)。

head -n 3 test.txt | xargs -I XX main -o '"XX"'

main一度電話してくださいファイルの行を使用します。

xargs -n 1 main -o <test.txt

答え2

使用牛に似た一種の栄養 sed~のe評価注文する:

sed 's#^#./main -o &#e' test.txt

型が間違っている場合は、前にコードを追加するだけです。たとえば、最初の行の形式を「./main -o 27 8d ca 53 f9 60 14 be"、次のように動作します。

sed 's/../& /g;s#^#./main -o &#e' test.txt

関連情報