これは私の組織の誰かが書いたシェルスクリプトの一部です。
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