Я застрял в особой ситуации, когда из python я печатаю две строки одну за другой и читаю это в скрипте bash (который вызывает фрагмент кода python). Я ожидаю, что размер массива будет 2, но почему-то bash рассматривает пробелы также как разделитель элементов и возвращает размер 3.
Примеры сценариев
Файл multi_line_return.py имеет следующее содержимое
print("foo bar")
print(5)
multi_line_call. sh имеет следующее содержимое
#!/bin/bash
PYTHON_EXE="ABSOLUTE_PATH TO PYTHON EXECUTABLE IN LINUX"
CURR_DIR=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)/
array=()
while read line ; do
array+=($line)
done < <(${PYTHON_EXE} ${CURR_DIR}multi_line_return.py)
echo "array length --> ${#array[@]}"
echo "each variable in new line"
for i in "${array[@]}"
do
printf $i
printf "\n"
done
Теперь сохраните оба вышеуказанных файла в одном каталоге и выполните следующий вызов, чтобы увидеть результат.
bash multi_line_call.sh
Как видите в результате
I am getting
array length = 3
1.foo, 2.bar & 3. 5
The expectation is
One complete line of python output (stdout) as one element of bash array
array length = 2
1. foo bar & 2. 5