for循环在好几个文本在linux,linux – 在一个for循环的shell脚本中迭代而不是单词...

本文探讨了在bash脚本中,for循环与while read结合使用读取文件内容的区别。for循环通常按单词(由IFS定义的分隔符分隔)遍历,而while read循环则逐行读取。文中提到了如何修改IFS以使for循环按行处理,并建议使用子shell来避免影响全局环境。此外,还讨论了进程替换在bash中的应用。
摘要由CSDN通过智能技术生成

for循环不是设计为循环线。 for循环遍历“单词”或“fields”。

循环线的惯用方法是使用while循环与read相结合。

ioscan -m dsf | while read -r line

do

printf '%s\n' "$line"

done

请注意,由于管道,while循环在子shell中。在bash中,您可以通过使用进程替换来解决此问题。

while read -r line

do

printf '%s\n' "$line"

done <

for循环使用$ IFS(内部字段分隔符)变量中的字符作为分隔符分隔值循环。通常$ IFS包含空格,制表符和换行符。这意味着for循环将循环遍历“单词”,而不是在线上。

如果您坚持使用for循环来循环使用,则必须将$ IFS的值更改为只换行。但是,如果这样做,您必须保存$ IFS的旧值,并在循环后恢复,因为许多其他事情也取决于$ IFS。

OLDIFS="$IFS"

IFS=$'\n' # bash specific

for line in $(ioscan -m dsf)

do

printf '%s\n' "$line"

done

IFS="$OLDIFS"

或者,您可以使用subshel​​l来包含对$ IFS的更改:

(

# changes to variables in the subshell stay in the subshell

IFS=$'\n'

for line in $(ioscan -m dsf)

do

printf '%s\n' "$line"

done

)

# $IFS is not changed outside of the subshell

也可以看看:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值