다음은 내 조직의 누군가가 작성한 쉘 스크립트의 일부입니다.
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