如何在bash中回显数组中的所有值

Mat*_*sse 20 arrays bash dialog

我正在使用对话框制作一个bash脚本.我的脚本在两个tar.gz中区分文件.每个添加文件都放在一个数组中,每个删除文件都放在另一个数组中.

所有文件都添加到我的两个数组中,当我想要回显它们时,它是有效的

echo ${tabAjout[@]}
echo ${tabSuppr[@]} 
Run Code Online (Sandbox Code Playgroud)

输出是:

bonjour.txt.gpg test2.txt.gpg test.txt.gpg
hello.txt.gpg
Run Code Online (Sandbox Code Playgroud)

现在我想在msgbox中添加它.

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

通话功能:

affiche_message "Title" "Delete : ${tabSuppr[@]} \n\n Add : ${tabAjout[@]}"
Run Code Online (Sandbox Code Playgroud)

当我运行我的脚本时,msgbox只包含数组的第一个值.如果我通过$ {#tabAjout [@]}更改$ {tabAjout [@]},则对话框窗口回显该数组包含3个值.

cho*_*oba 45

使用*的标展开数组为一个字:

"${tabSuppr[*]}"
Run Code Online (Sandbox Code Playgroud)

请参阅man bash解释.

  • @eladsilver:当您使用“*”作为双引号中的数组索引时,bash 将数组扩展为单个单词,并用特殊变量“$IFS”的第一个字符分隔元素。 (4认同)
  • @zundi:以下似乎有效:`( IFS=$'%'; ajout="${tabAjout[*]}";suppr="${tabSuppr[*]}" ; affiche_message“标题”“删除:$ {suppr//%/\\n}\n\n添加:${ajout//%/\\n}" ;)`。 (2认同)
  • 你得到了我对答案的支持,但“请参阅 man bash 进行解释”。根本不是很有用...有人能解释一下吗? (2认同)