우리는 문자 인코딩 및 bash 대체와 관련된 매우 이상한 퍼즐을 겪고 있습니다. 여기서 bash 변수를 다른 bash 변수로 파이프되는 rake 스크립트에 전달하고 다음에 무엇을 시도해야 할지 잘 모르겠습니다. 이는 대체가 아닌 방식으로 변수를 생성할 때만 작동하지만 변수를 생성하는 방식과 일치할 뿐만 아니라 해당 이진 표현도 일치합니다. 이것~해야 한다잘못된 인코딩, null 종결자 또는 표시할 수 없는 문자와 관련된 모든 항목을 제외합니다. 이것은 어떤 언어에서든 제가 본 가장 흥미로운 버그 중 하나이므로 커뮤니티와 공유하고 여기에서 무슨 일이 일어날 수 있는지에 대한 아이디어가 있는지 확인하고 싶었습니다. 자세한 내용은 다음을 참조하세요.
RELEASE_CODE=1250
MATCHING=replace
NAME=redactedDeployment-replace-d
첫째, 스크립트가 예상된 결과로 전달되는 작업 사례입니다.
# FULLNAME=redactedDeployment-1250-d
# deployments=$(rake find_deployments[$FULLNAME])
# echo $deployments
redactedDeployment-1250-d
# echo $FULLNAME
redactedDeployment-1250-d
# echo $FULLNAME | perl -lpe '$_=join " ", unpack"(B8)*"'
01110010 01100101 01100100 01100001 01100011 01110100 01100101 01100100 01000100 01100101 01110000 01101100 01101111 01111001 01101101 01100101 01101110 01110100 00101101 00110001 00110010 00110101 00110000 00101101 01100100
그리고
# if [ "${MATCHING,,}" = "replace" ]; then
> FULLNAME=${NAME/replace/$RELEASE_CODE}
> tr -dc '[[:print:]]' <<< "$FULLNAME" #Remove non-printable characters, same result if we remove this line
> else
> FULLNAME=${NAME}-${RELEASE_CODE}
> fi
# deployments=$(rake find_deployments[$FULLNAME])
rake aborted!
Don't know how to build task 'find_deployments[redactedDeployment-1250-d' (See the list of available tasks with `rake --tasks`)
(See full trace by running task with --trace)
# echo $FULLNAME
redactedDeployment-1250-d
# echo $FULLNAME | perl -lpe '$_=join " ", unpack"(B8)*"'
01110010 01100101 01100100 01100001 01100011 01110100 01100101 01100100 01000100 01100101 01110000 01101100 01101111 01111001 01101101 01100101 01101110 01110100 00101101 00110001 00110010 00110101 00110000 00101101 01100100