为什么[我在$ {ARR [@]};回显$ {i}]打印空格分隔的输出?

时间:2017-12-31 07:21:16

标签: bash

我使用以下方式从文件中读取输入:

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"

1 个答案:

答案 0 :(得分:2)

为避免拆分空格,请替换:

for i in ${ARR[@]}; do

使用:

for i in "${ARR[@]}"; do

如果没有双引号,shell会进行分词。

最好将echo ${i}替换为echo "${i}"。如果没有双引号,${i}将受到分词(这将导致多个空格折叠为一个空白)和路径名扩展(这可能导致具有shell-active的单词)要用当前目录中的文件名替换的字符。)