引数なしで実行するとエラーになる。[ ] は使ったまま、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
この問題を含む Linux・シェル のテストを制限時間つきで解く
Linux・シェルクイズへ