【问题标题】:Pushing a new value to array inside heredoc in Bash在 Bash 的 heredoc 中将新值推送到数组
【发布时间】: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")

标签: linux bash heredoc


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-12-03
    • 1970-01-01
    • 2020-10-23
    • 2020-02-21
    • 2017-03-21
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    相关资源
    最近更新 更多