Как собрать несколько строк в переменной в скрипте оболочки - PullRequest
0 голосов
/ 01 сентября 2018

Я хочу сохранить несколько строк в переменной с циклом for.

Я использую приведенный ниже код, но не получаю ожидаемого результата.

start=720000003999086110
end=720000003999086119

for((c=$start; c<= $end; c++))


do
    list= lookupSerialNumber $c
    done

Я хочу, чтобы приведенное ниже значение было сохранено в переменной, а затем я буду использовать эту переменную в своем CLI приложения.

lookupSerialNumber 720000003999086110
lookupSerialNumber 720000003999086111
lookupSerialNumber 720000003999086112
lookupSerialNumber 720000003999086113
lookupSerialNumber 720000003999086114
lookupSerialNumber 720000003999086115
lookupSerialNumber 720000003999086116
lookupSerialNumber 720000003999086117
lookupSerialNumber 720000003999086118
lookupSerialNumber 720000003999086119
 ... 

ниже код моего приложения,

 /opt/vs/bin/vscli -u $username -p $password <<EOF 
 +voucher,main,setup,lookupAndUpdate 
 +config 
 $list 
 exit 
 EOF

Пожалуйста, помогите мне в этом.

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Для создания переменной $list:

list=$(printf 'lookupSerialNumber %s\n' $(seq "$start" "$end"))
printf -v list 'lookupSerialNumber %s\n' $(seq "$start" "$end")

Последний будет иметь дополнительный символ новой строки в конце, который можно удалить с помощью: ${list%$'\n'}.


Вы можете использовать подстановку команд $(...) внутри здесь-документов:

cat <<EOF
...
$(printf 'lookupSerialNumber %s\n' $(seq "$start" "$end"))
...
...
EOF
0 голосов
/ 01 сентября 2018

Вы должны добавить к предыдущим результатам. Я не уверен, что понял тебя. Если вы хотите сохранить эту команду, вы можете использовать:

start=720000003999086110
end=720000003999086119
list=""

for ((c=$start; c<= $end; c++))
do
    list="$list lookupSerialNumber $c"
done

В противном случае, если вы хотите сохранить результаты выполнения этой команды, код может быть:

start=720000003999086110
end=720000003999086119
list=""

for ((c=$start; c<= $end; c++))
do
    list="$list $(lookupSerialNumber $c)"
done

Вы также можете использовать массивы для всего этого. Есть несколько подходов к проблеме. Наилучшее будет зависеть от использования этих данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...