我使用以下方式从文件中读取输入:
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
是否需要特定选项才能正确打印?
根据{{3}},将其更改为echo "${i}"
应该修复它,但它不会。
这有同样的问题:
printf "${i} \n"
答案 0 :(得分:2)
为避免拆分空格,请替换:
for i in ${ARR[@]}; do
使用:
for i in "${ARR[@]}"; do
如果没有双引号,shell会进行分词。
最好将echo ${i}
替换为echo "${i}"
。如果没有双引号,${i}
将受到分词(这将导致多个空格折叠为一个空白)和路径名扩展(这可能导致具有shell-active的单词)要用当前目录中的文件名替换的字符。)