在 Bash 的 heredoc 中将新值推送到数组

Posted

技术标签:

【中文标题】在 Bash 的 heredoc 中将新值推送到数组【英文标题】:Pushing a new value to array inside heredoc in Bash 【发布时间】:2021-09-02 23:43:46 【问题描述】:

假设我有这个 Bash 代码块:

arr=(a b c)
sudo -i -u username bash <<EOF
  arr[$#arr[@]]="d"
EOF

我需要在 heredoc 中的 arr 中添加“d”。但它不起作用。

【问题讨论】:

使用sudo 命令,您将启动另一个bash 会话。 "d" 值被附加到 那个 会话中的 arr 数组,然后您在初始会话中的数组 arr更改。您是否希望通过 sudo 获取 shell 脚本? 是的,看来我必须定义一个内部变量然后对其进行修改。 arr[$#arr[@]]="d" = arr+=("d") 【参考方案1】:

您可以将上下文传递给另一个会话。

arr=(a b c)
sudo -i -u username bash <<EOF
$(declare -p arr)
arr[\$#arr[@]]="d"
EOF

或喜欢:

arr=(a b c)
DATA=$(declare -p arr)
export DATA
sudo --preserve-env=DATA -i -u username bash <<'EOF'
eval "$DATA"
arr[$#arr[@]]="d"
EOF

【讨论】:

以上是关于在 Bash 的 heredoc 中将新值推送到数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在nodeJS的mysql查询中将值推送到数组?

如何将新值推送到 Mongoose 中的嵌套数组

Mongoose:如何将新值推送到特定键中?

在jQuery中将值推送到数组中

如何在 PHP 中将数组值推送到另一个数组中? [复制]

如果它是一个函数,则将值推送到 javascript 数组的问题