Оценка Heredoc Param в Баш

$times=$1
ssh -A vyas@subdom.dom.net <<- EOF
        for i in {1..$times}
        do
                echo 'Iteration' $i
                url='vyas@app'
                echo 'Connecting to' $url
        done
EOF

Оба оператора echo выводят пробелы для имени переменной:

Итерация Подключение к

$times=$1
ssh -A vyas@subdom.dom.net <<- \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 .. $ раз?

3
задан 14.05.2020, 10:21

1 ответ

Оболочка выполняет расширение фигурной скобки перед подстановкой переменных, таким образом, конструкция for i in {1..$x} не может работать, как Вы ожидаете.

, Так как Вы хотите передать в переменной, Вы не можете выйти из heredoc разделителя, таким образом, необходимо работать для защиты всех переменных, Вы не хотите расширенный

times=$1    # no "$" on the left-hand side!
ssh -A vyas@subdom.dom.net <<- EOF
        for i in \$(seq $times)
        do
                echo Iteration \$i
                url='vyas@app'
                echo 'Connecting to' \$url
        done
EOF
0
ответ дан 14.05.2020, 10:22

Теги

Похожие вопросы