在 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 中将新值推送到数组的主要内容,如果未能解决你的问题,请参考以下文章