내 목표는 하나의 명령 출력에서 여러 bash 변수를 초기화하는 것입니다. 특히 line은 i
변수의 값이어야 합니다 i
. 예:
내 명령은 다음과 같은 Python 프로그램입니다 init.py
.
if __name__ == '__main__':
print("Value of A")
print("Value of B")
print()
print("Value of D")
원하는 결과:
echo "A='$A', B='$B', C='$C', D='$D'"
# --> A='Value of A', B='Value of B', C='', D='Value of D'
그런 다음 성공하지 못한 채 시도한 것은 다음과 같습니다.
read A B C D < <(python init.py)
# --> Effect: A='Value', B='of', C='A', D=''
read -d$'\n' A B C D < <(python init.py)
# --> Effect: A='Value', B='of', C='A', D=''
IFS=$'\n' read A B C D < <(python init.py)
# --> Effect: A='Value of A', B='', C='', D=''
IFS=$'\n' read -d$'\n' A B C D < <(python init.py)
# --> Effect: A='Value of A', B='', C='', D=''
- 이 문제를 해결하는 방법?
- 이것을 null 바이트와 같은 다른 구분 기호로 일반화하려면 어떻게 해야 합니까
\0
?
답변1
빈 행이 있으면 IFS
여러 행이 압착되므로 사용이 작동하지 않습니다 \n
.
그러나 다음을 사용할 수 있습니다 readarray
.
readarray -t arr < <(python init.py)
echo "A='${arr[0]}', B='${arr[1]}', C='${arr[2]}', D='${arr[3]}'"
-d ''
구분 기호 추가 \0
:
readarray -d '' -t arr < <(python init.py)
에서 man bash
:
-디 delim의 첫 번째 문자는 개행 문자가 아닌 각 입력 행을 종료하는 데 사용됩니다. delim이 빈 문자열인 경우 mapfile은 NUL 문자를 읽을 때 줄을 종료합니다.