У меня есть сценарий, из которого я возвращаю несколько значений из каждой строки в новой строке. Чтобы зафиксировать эти значения в качестве переменных bash, я использую встроенный read
(как рекомендовано here).Функция чтения Bash возвращает код ошибки при использовании нового разделителя строк
Проблема заключается в том, что когда я использую новый символ линии в качестве разделителя для read
, я, кажется, всегда получаю ненулевой код выхода. Это приводит к хаосу с остальными моими сценариями, которые проверяют результат операции.
Вот сокращенная версия того, что я делаю:
$ read -d '\n' a b c < <(echo -e "1\n2\n3"); echo $?; echo $a $b $c
1
1 2 3
Обратите внимание на статус выхода 1.
Я не хочу, чтобы переписать мой сценарий (echo
команда выше) использовать другой разделитель (поскольку имеет смысл использовать новые строки в других местах кода).
Как я могу получить read
, чтобы играть хорошо и вернуть нулевой статус выхода, когда он успешно считывает 3 значения?
Update
Хм, кажется, что я могу быть с помощью "разделитель" ошибочно. От человека странице:
-d *delim* The first character of delim is used to terminate the input line, rather than newline.
Таким образом, один способ, которым я мог бы достичь желаемого результата, чтобы сделать это:
read -d '#' a b c < <(echo -e "1\n2\n3\n## END ##"); echo $?; echo $a $b $c
Может быть, есть более хороший путь, хотя?
Вы должны написать '-d $ '\ n''. В противном случае разделителем является обратная косая черта (которая, вероятно, никогда не читается, так как вы не используете параметр '-r' для' read'). –