단일 명령의 출력으로 여러 bash 변수 초기화

단일 명령의 출력으로 여러 bash 변수 초기화

내 목표는 하나의 명령 출력에서 ​​여러 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=''
  1. 이 문제를 해결하는 방법?
  2. 이것을 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 문자를 읽을 때 줄을 종료합니다.

관련 정보