-n Vs!(感嘆符)はテストコマンドとは異なる動作をします。

-n Vs!(感嘆符)はテストコマンドとは異なる動作をします。
#!/bin/bash
declare -A numMap
numMap[1]=1
#case-one
if ! [[ ${numMap[1]} ]];then
  echo "case-one: the key 1 for numMap array is not set"
fi
#case-two
if [[ -n ${numMap[1]} ]]; then
  echo "case-two: the key 1 for numMap array is not set"
fi

私は有効な値 - が含まれているので、両方とも偽であることを! [[ ${numMap[1]} ]]望みます。しかし、コードを実行すると印刷されます。[[ -n ${numMap[1]} ]]numMap[1]1

case-two: the key 1 for numMap array is not set

なぜ[[ -n ${numMap[1]} ]]事実と評価されますか?

ベストアンサー1

[[ -n ${numMap[1]} ]]文字列が次のようにテストします。いいえ空です。これは真ではないため、テストはtrueを返します。

おすすめ記事