Чтение каждой строки файла в переменную

Ошибка, которую я вижу для некоторого тестового кода,

can't read "file_": no such variable
    while executing

, что указывает на то, что TCL ищет несуществующую file_переменную. Это можно исправить, отметив, где заканчиваются переменные существа и; TCL использует для этого тот же синтаксис, что и Perl, {}вокруг имени переменной.

spawn sh -c "ssh -o StrictHostKeyChecking=no hostname <./script.sh > /root/scp_output_${file}_${date}.txt"
0
17.02.2020, 23:15
1 ответ

Вы читаете три строчки, значит звоните readтри раза:

{
    IFS= read -r a
    IFS= read -r b
    IFS= read -r c
} <<'END_INPUT'
line 1
line 2
line 3
END_INPUT

printf '<%s> <%s> <%s>\n' "$a" "$b" "$c"

Обобщая это на произвольное количество строк:

set --
while IFS= read -r line; do
   set -- "$@" "<$line>"   # cheating here by adding on the "<...>"
done <<'END_INPUT'
line 1
line 2
line 3
line 4
END_INPUT

printf '%s\n' "$*"

"$*"будет расширен до одной строки в кавычках, состоящей из всех позиционных параметров, разделенных первым символом$IFS(пробела по умолчанию ).

1
28.04.2021, 23:23

Теги

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