Bash 中的 Heredoc Param 评估

Bash 中的 Heredoc Param 评估
$times=$1
ssh -A [email protected] <<- EOF
        for i in {1..$times}
        do
                echo 'Iteration' $i
                url='vyas@app'
                echo 'Connecting to' $url
        done
EOF

两个 echo 语句均打印变量名称的空白:

迭代连接到

$times=$1
ssh -A [email protected] <<- \EOF
        for i in {1..$times}
        do
                echo 'Iteration' $i
                url='vyas@app'
                echo 'Connecting to' $url
        done
EOF

输出:

迭代 {1…} 连接到 vyas@app

我正在使用 ./rt.sh (./rt.sh 5) 执行上述脚本。如何获取 $i 的值以读取 1..$times?

答案1

shell 在变量替换之前执行括号扩展,因此该构造for i in {1..$x}无法按预期工作。

由于您要传递一个变量,因此您无法逃避 heredoc 终止符,因此您必须努力保护所有您不想扩展的变量

times=$1    # no "$" on the left-hand side!
ssh -A [email protected] <<- EOF
        for i in \$(seq $times)
        do
                echo Iteration \$i
                url='vyas@app'
                echo 'Connecting to' \$url
        done
EOF

相关内容