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