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

问题描述 投票:1回答:1

这个问题在这里已有答案:

我已经从文件中读取输入:

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"
bash
1个回答
2
投票

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

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

附:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.