Linux・シェル記述難易度 標準

引数なしで実行するとエラーになる。[ ] は使ったまま、3 行目を正しく直して書いてください。

#!/bin/bashname=$1if [ $name = "admin" ]; then  echo "hello admin"fi

正答

正答if [ "$name" = "admin" ]; then

次も正解: if [ "$name" = admin ]; then / if [ "${name}" = "admin" ]; then / if [ "$name" == "admin" ]; then / if [ "$name" == admin ]; then(空白の有無・大文字小文字・末尾のセミコロンは問いません)

解説

引数なしで実行すると $1 は空で、name も空になる。3 行目の [ $name = "admin" ] は展開後に [ = admin ] となり、[ コマンドは unary operator expected のエラーを出す。"$name" と二重引用符で囲めば空でも [ "" = admin ] として評価され、正しく偽になる。空白を含む値でも同様に壊れる。2 行目を name="$1" に変える直し方は誤りで、代入では空でも問題なく、3 行目の展開で崩れるのは変わらない。

参考: www.gnu.org

quotingifvariable

この問題を含む Linux・シェル のテストを制限時間つきで解く

Linux・シェルクイズへ