【问题标题】:Why "if [[ ${value} == ^[[:blank:]]*$ ]]" cannot detect empty variable?为什么“if [[ ${value} == ^[[:blank:]]*$ ]]”无法检测到空变量?
【发布时间】:2017-02-11 10:10:37
【问题描述】:

我尝试了以下三个代码来检测空变量。

unset value

if [[ -z ${value} ]]; then
  echo "value is judged as empty by [[ -z ]] : value = '${value}'"
fi

if [[ ${value} == ^[[:blank:]]*$ ]]; then
  echo "value is judged as empty by [[ == ]] : value = '${value}'"
fi

if echo ${value} | grep -E "^[[:blank:]]*$"; then
  echo "value is judged as empty by grep -E "^[[:blank:]]*$" : value = '${value}'"
fi

结果如下,

value is judged as empty by [[ -z ]] : value = ''

value is judged as empty by grep -E ^[[:blank:]]* : value = ''

为什么第二个不起作用?请告诉我。

【问题讨论】:

  • 要使用正则表达式,请使用 =~: if [[ ${value} =~ ^[[:blank:]]*$ ]]; then。您也可以使用 glob:if [[ $value = *([[:blank:]]) ]]; then

标签: bash shell


【解决方案1】:

您的第二个是模式,而不是正则表达式。它仅匹配具有至少 3 个字符的字符串:^、单个空白字符、零个或多个任意字符以及 $。要匹配表示零个或多个空白字符的正则表达式,请使用 =~ 运算符。

if [[ $value =~ ^[[:blank:]]*$ ]]; then

【讨论】:

  • 啊,对。这些只是正则表达式中的元字符。
  • 感谢您的回答。我没有区分“模式”和“正则表达式”。
猜你喜欢
  • 2020-04-29
  • 2021-11-30
  • 1970-01-01
  • 2016-12-04
  • 2012-01-16
  • 2016-09-11
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
相关资源
最近更新 更多