쉘은 변수 값을 대체하지 않습니다

쉘은 변수 값을 대체하지 않습니다

내 스크립트에 문제가 있나요?

echo "Environment validation started"
ID=`getValueFromFile "ID"`
echo $ID
FAILLOG=$HOME/$ID/logs/1.log
echo $FAILLOG
echo $HOME/$ID/logs/1.log
>$FAILLOG 

산출:

Environment validation started
JASONID
/logs/1.log
/logs/1.log
/logs/1.log: No such file or directory/home/gol/JASONID

이상적으로 echo는 그런 것을 제공해야 합니다. 그렇죠?

/home/gol/JASONID/logs/1.log

bash -vx 출력 추가

+ echo $'JASONID\r'
JASONID
FAILLOG=$HOME/$ID/logs/1.log
+ FAILLOG=$'/home/gol/JASONID\r/logs/1.log'
echo $FAILLOG
+ echo $'/home/gol/JASONID\r/logs/1.log'
/logs/1.log
echo $HOME/$ID/logs/1.log
+ echo $'/home/gol/JASONID\r/logs/1.log'
/logs/1.log

답변1

~처럼@EricRenov끝에 ID캐리지 리턴( )이 있는 경우 커서를 문자열의 시작 부분으로 이동하여 출력이 손상되고 나머지 부분이 앞 부분을 덮어쓰게 됩니다.\r

printf %q특수 문자를 보려면 다음을 사용하십시오 .

ID=$'abcdef\r'
echo "$ID/123"
printf "%q\n" "$ID/123"

우리는 다음을 얻었습니다:

/123ef
$'abcdef\r/123'

매개변수 확장을 사용하여 최종 CR을 삭제할 수 있습니다.

ID=${ID%$'\r'}
echo "$ID/123"
printf "%q\n" "$ID/123"

( $'..'비표준 IIRC이지만 Bash 등에서 작동합니다.)

관련 정보