以下是我组织中某人编写的 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}
字符的大小写更改为大写。$parameter
pattern
如果没有模式,它会更改 中所有字符的大小写$parameter
。
正如 Tripleee 在他的回答中指出的那样,{$...}
是一个语法错误,或者更确切地说,如果您的值为{$HOSTNAME^^}
,则会扩展为字符串。{hostname^^}
$HOSTNAME
hostname