如何检查变量是否仅包含换行符

如何检查变量是否仅包含换行符

如何检查$last_cmdZsh 中的变量仅包含换行符而没有其他内容?

理想情况下通过替换来完成,因为这是提示脚本的一部分,所以需要非常快。

以下给我一个bad substitution错误:

if [[ -n "${$last_cmd/\n/}" ]]; then
  no_new_lines=1
fi

基本上想要相当于以下内容:

if [[ -n "$(echo -n $last_cmd)" ]]; then
  no_new_lines=1
fi

答案1

使用正则表达式:

if [[ $1 =~ ^$'\n'*$ ]]; then
  echo empty or only contains newlines
else
  echo contains non-newline characters 
fi

使用通配符,不是直接测试是否只有换行符,而是测试是否存在非换行符:

if [[ $1 == *[^$'\n']* ]]; then
  echo contains non-newline characters 
else
  echo empty or only contains newlines
fi

或者简单的 sh 方式:

nl='
'
case $1 in
  *[!$nl]*) echo contains non-newline characters;;
  *) echo only contains newlines;;
esac

为了与通配符进行正向匹配,您需要# extendedglob运算符(相当于*正则表达式运算符):

set -o extendedglob
if [[ $1 == $'\n'# ]]; then
  echo empty or only contains newlines
else
  echo contains non-newline characters 
fi

相关内容