本週 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

相關內容