将从文件中读取的字符串放在双引号内

将从文件中读取的字符串放在双引号内

我正在读取一个输入文件,其中包含 bash 脚本中的一些十六进制数字。然后,我想将这些字符串作为可执行文件的命令行参数传递。

说,这是我的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为这些行中的前三行各调用一次脚本/程序:

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

使用GNU sede估价命令:

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

相关内容