我正在读取一个输入文件,其中包含 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 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