我正在尝试通过查看以下输出来测试我用dd编写的磁盘擦除实用程序:
00000000
*
00000200
我当前在shell脚本中编写了一个简短的示例循环来迭代输出并将其打印出来以验证输出:
dd if=/dev/zero of=sample bs=4M count=1
results=`dd if=sample bs=512 count=1 | hexdump -C | awk '{ print $1 } '`
for i in $results
do
echo -e "$i"
done
但是当它到达“*
”字符时会打印出目录列表。如果我试图逃避它,那么它只会打印出“$i
”。使用以下if-else结构似乎没有帮助:
if [ "$i" == "\*" ] #using "*" didn't seem to work either
then
echo -e "\*"
else
echo -e "$i"
fi
关于我哪里出错的任何想法?
答案 0 :(得分:2)
问题是星号已在for
中扩展。为避免这种情况,请使用read
而不是反引号和数组而不是字符串:
results=()
while read line ; do
results+=("$line")
done < <( dd if=sample bs=512 count=1 | hexdump -C | awk '{ print $1 } ' )
for i in "${results[@]}" ; do
echo -e "$i"
done
答案 1 :(得分:1)
答案 2 :(得分:1)
无需创建$results
变量,然后将其列在for循环中。
您可以使用awk本身列出您的输出:
dd if=sample bs=512 count=1 2>/dev/null | hexdump -C | awk '{ print $1 }'
答案 3 :(得分:1)
或者,“在盒子外面思考”,
只是使用不同的字符? #
?
IHTH