변수에 명령 출력을 할당하면 이상한 결과가 발생합니다.

변수에 명령 출력을 할당하면 이상한 결과가 발생합니다.

내 스크립트는 다음과 같습니다

#!/bin/sh
PROJECT_DIR=$(cd -P -- "$(dirname -- "$0")" && pwd -P)

COMMANDS_CODE=$(php $PROJECT_DIR/bin/console generate:code)

echo $COMMANDS_CODE

출력에는 모든 개행 문자가 제거되었으며(스크립트를 직접 호출하는 경우에는 발생하지 않음) 다음과 같이 처음에 이상한 경로가 포함되어 있습니다.

/bin /boot /cdrom /dev /etc /home 
/initrd.img /lib /lib64 /lost+found 
/media /mnt /opt /proc /root /sbin 
/selinux /srv /sys /tmp /usr /var /vmlinuz 
... here starts the actual output but without any newlines ...

(위 내용은 실제로 에코된 긴 문자열입니다. 가독성을 위해 몇 가지 줄 바꿈을 추가했습니다.)

거기서 무슨 일이 일어 났어?

내가 만들면

php bin/console generate:code

내 bash 쉘의 프로젝트 디렉토리에서는 모든 것이 잘 작동합니다.

답변1

변수를 큰따옴표로 묶어보세요. 예:echo "$COMMANDS_CODE"

쉘 변수 및 따옴표에 대해 자세히 알아볼 수 있습니다.여기, "인용의 중요성" 섹션 아래에 있습니다.

관련 정보