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