如何在Bash中打印数组中的所有值

62

我正在使用dialog编写一个Bash脚本。我的脚本可以区分两个tar.gz文件中的文件差异。每个添加的文件都被放置在一个数组中,每个删除的文件都被放置在另一个数组中。

所有文件都被添加到我的两个数组中,当我想要输出它们时,它可以正常工作。

echo ${tabAjout[@]}
echo ${tabSuppr[@]} 

输出结果为:

bonjour.txt.gpg test2.txt.gpg test.txt.gpg
hello.txt.gpg

现在我想将这个添加到msgbox中。

function affiche_message(){
    #Personnalisation de la fenêtre
    $DIALOG --title "$1" \
            --msgbox "$2" 20 45
}

调用函数:

affiche_message "Title" "Delete : ${tabSuppr[@]} \n\n Add : ${tabAjout[@]}"
当我运行脚本时,msgbox只包含数组的前几个值。如果我将${tabAjout[@]}更改为${#tabAjout[@]},对话框将显示该数组包含3个值。
1个回答

113

使用*作为下标,将数组扩展为单个单词:

"${tabSuppr[*]}"

请参阅man bash了解详细解释。


1
有没有办法让每个项目独立成行? - zundi
2
@zundi:以下似乎有效:( IFS=$'%'; ajout="${tabAjout[*]}"; suppr="${tabSuppr[*]}" ; affiche_message "Title" "Delete : ${suppr//%/\\n}\n\nAdd : ${ajout//%/\\n}" ; ) - choroba
2
你的回答获得了我的点赞,但是“See man bash for explanation.”并没有什么用...有人能解释一下吗? - elad silver
4
当你在双引号中使用 * 作为数组索引时,Bash会将数组展开成一个单词,并以特殊变量 $IFS 的第一个字符作为分隔符来分隔元素。 - choroba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接