如果你有一个带有分隔符的字符串,比如说一个,字符,你可以IFS这样使用:
text=some,comma,separated,text
IFS="," read -ra ADDR <<< "$text"
for i in ${ADDR[@]}
do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
每个单词将打印在新行中。但是,如果您获取类似命令的结果ls,然后尝试将其拆分为\n您不会得到相同的结果:
results=$(ls -la)
IFS="\n" read -ra ADDR <<< "$results"
for i in ${ADDR[@]}
do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
它只打印 2 行,而且它们甚至不是文件条目。这是
total
36
Run Code Online (Sandbox Code Playgroud)
命令输出的第一行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
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的一点是,我们必须引用数组 和 的替换$i。
| 归档时间: |
|
| 查看次数: |
7749 次 |
| 最近记录: |