Головоломка недели Bash

Головоломка недели Bash

У нас очень странная головоломка, связанная с кодировками символов и заменой bash, где мы передаем переменную bash в скрипт rake, который передается в другую переменную bash, и я не уверен, что попробовать дальше. Это работает только тогда, когда вы создаете переменную способом без замены, но не только переменные совпадают, независимо от того, как вы их создаете, но даже их двоичные представления совпадают. Этодолженисключите все, что связано с плохими кодировками, нулевыми терминаторами или неотображаемыми символами. Это одна из самых интересных ошибок, которые я когда-либо видел, работающих с любым языком, поэтому я хотел поделиться с сообществом и посмотреть, есть ли у кого-нибудь идеи, что здесь может происходить. Для дальнейшего контекста:

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

Связанный контент