gpt4 book ai didi

linux - 如何使用 Bash 脚本拆分换行符?

转载 作者:太空宇宙 更新时间:2023-11-04 09:11:07 27 4
gpt4 key购买 nike

如果你有一个带分隔符的字符串,比如 , 字符,你可以像这样使用 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 命令输出的第一行。

有人可以帮忙吗?如果不是正确的方法,那是怎么回事?

最佳答案

read 通常读取直到到达换行符,除非您使用 -d 另行告诉它。

在这个例子中,我们使用-d $'\0'。这会读取 shell,直到它到达一个空字符(它不会出现在 ls 的输出中)。然后 IFS=$'\n' 导致 shell 在换行处拆分并将每一行分配为数组元素。请注意使用 $'...' 而不是 "..." 来解释转义序列。

results=$(ls -la)

IFS=$'\n' read -ra ADDR -d $'\0' <<< "$results"

for i in "${ADDR[@]}"
do
echo "$i"
done

最后但同样重要的是,我们必须引用数组和 $i 的替换。

关于linux - 如何使用 Bash 脚本拆分换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56095118/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com