我正在读取一个test.txt文件。格式:
79033d0135a21e45c60e283785f5914b
dde8d97a40cd22667ccb3ca972197586
4fd5ea73cd51db256384fb3333b0eb3d我正在逐行读取这个文件,并将其拆分为(例如。第1行: 79 03 3d 01 35 a2 1e 45 c6 0e 28 37 85 f5 91 4b)
bash脚本是:
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
a="$line" | cut -c1-2
b="$line" | cut -c3-4
c="$line" | cut -c5-6
d="$line" | cut -c7-8
e="$line" | cut -c9-10
f="$line" | cut -c11-12
g="$line" | cut -c13-14
h="$line" | cut -c15-16
i="$line" | cut -c17-18
j="$line" | cut -c19-20
k="$line" | cut -c21-22
l="$line" | cut -c23-24
m="$line" | cut -c25-26
n="$line" | cut -c27-28
o="$line" | cut -c29-30
p="$line" | cut -c31-32
#./a.out "$a" "$b" "$c" "$d" "$e" "$f" "$g" "$h" "$i" "$j" "$k" "$l" "$m" "$n" "$o" "$p"
echo "$line"
echo "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p"
done < test_10.txt现在我只是想打印变量。我打算稍后将它们作为命令行arg传递给我的C++程序。
问题是,我无法打印变量。当然,我的C++程序也不能接受参数。
我做错了什么?
发布于 2016-10-03 15:22:28
您需要命令替换,$(),(以及echo):
a=$(echo "$line" | cut -c1-2)在这里,命令echo "$line" | cut -c1-2的STDOUT将保存为变量a。
与创建匿名管道不同,您可以使用“此处”字符串<<<传递变量内容:
a=$(cut -c1-2 <<<"$line")现在选择任何方法,并对所有其他方法应用相同的方法。
发布于 2016-10-03 15:24:04
要使管道按您的意愿工作,$line的内容需要到达stdin,例如通过echo。
此外,您还需要使用带有backticks或$()的$()(后者是首选方法)来将变量设置为命令的结果,否则它将尝试将echo "$line" | cut -c1-2的输出计算为命令本身,可能会给您一个command not found错误。
例如,您的第一个任务应该是
a=$(echo "$line" | cut -c1-2)其他人也会遵循类似的模式。
https://stackoverflow.com/questions/39835000
复制相似问题