我喜欢从stdin循环数据。这样的事情:
03-02-01-00-05-04-07-06-08-09-0A-0B-0C-0D-0E-0F
但是我无法预测我的输入数据是用空格还是换行符分隔的。有什么想法怎么做?没有产生新的过程高度赞赏。
答案 0 :(得分:4)
这不是特别优雅或高效,但它确实满足仅使用shell内部功能的要求。
while read -r line; do
for word in $line; do
blah blah blah "$word"
done
done
使用不带引号的$line
不仅要使空格标记化值,还要使用通配符扩展;如果你想避免这种情况,the noglob
option是你的朋友,虽然在你的脚本中打开和关闭它是一个巨大的麻烦,如果你需要通过其他部分工作 - 可能花费一个外部过程是一个小问题然后
答案 1 :(得分:3)
我的努力类似于@ tripleee,但没有遇到全局问题,我正在使用数组并引用扩展:
while read -r -a items
do
for item in "${items[@]}" # Quotes are important here
do
echo "$item" # blah blah blah
done
done < gash.txt
请注意,使用"${items[@]}"
,不 "${items[*]}"
非常重要。
编辑:Re。上面的注释,忽略制表符作为分隔符:
while IFS=$'\n ' read -r -a items
答案 2 :(得分:0)
您可以使用tr:
将所有空格转换为换行符tr ' ' '\n'