需要解码这一行 {$HOSTNAME^^} == {$arrName^^}

需要解码这一行 {$HOSTNAME^^} == {$arrName^^}

以下是我组织中某人编写的 shell 脚本的一部分。

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

有人可以帮我理解这一行吗?

答案1

${variable^^}是 Bash 4.x 参数扩展,它将变量的值转换为大写。

美元符号需要位于左大括号之前,而不是之后。

(不正确引用的)echo | cut管道可以类似地使用参数扩展来编写${line%%.*};或者您可以while IFS='.' read line _; do在阅读时使用 ... 在第一个句号处立即分割输入。

答案2

Bash 中的替换会将与通配模式匹配的${parameter^^pattern}字符的大小写更改为大写。$parameterpattern

如果没有模式,它会更改 中所有字符的大小写$parameter

正如 Tripleee 在他的回答中指出的那样,{$...}是一个语法错误,或者更确切地说,如果您的值为{$HOSTNAME^^},则会扩展为字符串。{hostname^^}$HOSTNAMEhostname

相关内容