繁体   English   中英

如何在外壳中回显“ *”字符以进行控制台

[英]How to echo an “*” character to console in shell

我正在尝试通过查看以下输出来测试用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

关于我要去哪里的任何想法?

问题是,星号在展开for了。 为了避免这种情况,请使用read代替反引号,并使用array代替字符串:

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

如果您想要确切的内容,请用单引号引起来

$ echo '*'

有关在此处使用bash进行报价的一些阅读: http : //tldp.org/LDP/abs/html/quoting.html

无需创建$results变量,然后将其在for循环中列出。

您可以使用awk本身列出输出:

dd if=sample bs=512 count=1 2>/dev/null | hexdump -C | awk '{ print $1 }'

或者,“跳出框框思考”,

只是使用其他字符? #

IHTH

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM