这个问题在这里已有答案:
我已经从文件中读取输入:
declare -a ARR
readarray -t ARR < <(cat /etc/passwd | tr "\n" "\n" )
这打印很好,但我想访问每一行:
printf '%s\n' "${ARR[@]}
这是在空格上分割输入:
for i in ${ARR[@]}; do
echo ${i}
done
echo
是否需要特定选项才能正确打印?基于this answer,将其更改为echo "${i}"
应该修复它,但事实并非如此。这有同样的问题:
printf "${i} \n"
为避免拆分空格,请替换:
for i in ${ARR[@]}; do
附:
for i in "${ARR[@]}"; do
如果没有双引号,shell会进行分词。
用echo ${i}
替换echo "${i}"
也是最好的。如果没有双引号,${i}
将受到分词(这将导致多个空格折叠为一个空白)和路径名扩展(这可能导致具有shell-active字符的单词被当前目录中的文件名替换) 。