“此处文档”的 EOF 中的 Bash 脚本数组循环

Posted

技术标签:

【中文标题】“此处文档”的 EOF 中的 Bash 脚本数组循环【英文标题】:Bash script array loop in EOF of "here document" 【发布时间】:2021-08-30 19:00:05 【问题描述】:

我正在尝试在“here document”中循环一个数组,并与expect for certbot一起使用:

myArray+=( "sub1.domain.org" "sub2.domain.org" )
echo $myArray[@]

expect <(cat << EOF
    certbot --apache \
    "$myArray[@]"
    for val in \"$myArray[@]"; do
        -d \"$val"
    done
EOF
)

最终结果应该是:

certbot --apache -d sub1.domain.org -d sub2.domain.org

然后我必须用 expect https://linux.die.net/man/1/expect 回复这些问题,但我的循环不起作用。

【问题讨论】:

期望使用 tcl 来编写脚本,而不是 shell/bash。它不会明白这一点。 您希望expect 在这里做什么(不是双关语)?应该将其视为最后的手段;许多命令提供了非交互式方式来指定您通常在交互式会话中提供的数据。 如果expect cerbot --apache -d ... 可以工作,那么最简单的方法是构建第二个数组(cmd=(certbot --apache); ...),然后运行expect "$cmd[@]" 嘿@chepner 这听起来很有趣,你能给我完整的例子吗? (为了简单起见,让我们把期望和“EOF here document”放在外面,因为我需要的只是 certbot 子域的循环) 【参考方案1】:

构建第二个数组以包含 certbot 的参数:

args=(--apache)
for val in "$myArray[@]"; do
    args+=(-d "$val")
done

cerbot "$args[@]"

【讨论】:

以上是关于“此处文档”的 EOF 中的 Bash 脚本数组循环的主要内容,如果未能解决你的问题,请参考以下文章

bash shell 脚本中的“set -o noglob”

“cat << EOF”如何在 bash 中工作?

for循环子命令中的bash变量扩展[重复]

Shell脚本入门到深入教程:快速入门

Shell脚本中的数组,而不是Bash

如何将bash脚本中的json解析为数组?数组值应该同时具有 key:value 格式