Необходимо декодировать эту строку {$ HOSTNAME ^^} == {$ arrName ^^}

Ниже приведена часть сценария оболочки, написанная кем-то из моей организации.

while read -r line do #split if needed arrName=$(echo $line | cut -d"." -f1) if [ {$HOSTNAME^^} == {$arrName^^} ]; then echo "Perfect $arrName" echo "$1" >> $TEMPFILE fi done < compuetrnames.txt 

Весь сценарий был понятен для меня, кроме этой одной строки

 if [ {$HOSTNAME^^} == {$arrName^^} ]; then 

Может кто-нибудь помочь мне понять эту линию.

${variable^^} – это расширение параметра Bash 4.x, которое дает значение переменной, преобразованное в верхний регистр.

Знак доллара должен идти до открытия скобки, а не после.

(Неправильно цитированное) echo | cut echo | cut трубопровод аналогичным образом можно записать с расширением параметра ${line%%.*} ; или вы можете использовать, while IFS='.' read line _; do while IFS='.' read line _; do while IFS='.' read line _; do …, чтобы сразу же разбить вход на первой полной остановке, когда вы его прочитали.

Замена ${parameter^^pattern} в Bash изменит случай символов в $parameter который соответствует шаблону pattern глобуса в верхнем регистре.

Без шаблона он изменяет регистр всех символов в $parameter .

Как указал в своем ответе триптих, {$...} является синтаксической ошибкой, или, скорее всего, {$HOSTNAME^^} будет расширяться до строки {hostname^^} если ваше значение $HOSTNAMEhostname .