【发布时间】:2019-05-11 23:48:24
【问题描述】:
如果你有一个带分隔符的字符串,比如说, 字符,你可以像这样使用IFS:
text=some,comma,separated,text
IFS="," read -ra ADDR <<< "$text"
for i in ${ADDR[@]}
do
echo $i
done
每个单词都将打印在一个新行中。但是,如果您获取像 ls 这样的命令的结果,然后尝试在 \n 上拆分它,您将不会得到相同的结果:
results=$(ls -la)
IFS="\n" read -ra ADDR <<< "$results"
for i in ${ADDR[@]}
do
echo $i
done
它只打印 2 行,它们甚至不是文件条目。这是
total
36
ls 命令输出的第一行。
有人可以提供一点帮助吗? 如果不是正确的方法,那是怎么回事?
【问题讨论】:
-
你的预期输出是什么?
-
希望这只是一个学术示例,但请务必阅读 mywiki.wooledge.org/ParsingLs 和 why-is-using-a-shell-loop-to-process-text-considered-bad-practice,然后再解析
ls输出或编写 shell 循环来操作文本。 -
IFS="\n"将两个字符\和n添加到IFS,而不是单个换行符。你会想要IFS=$'\n',但正如 Ed Morton 指出的那样,这不是遍历目录中文件的好方法。