$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