simonzack Asked: 2020-03-06 03:22:53 +0800 CST2020-03-06 03:22:53 +0800 CST 2020-03-06 03:22:53 +0800 CST 如何检查变量是否只有换行符 772 如何检查变量$last_cmd是否只有新行,而 Zsh 中没有其他内容? 理想情况下通过替换完成,因为这是提示脚本的一部分,所以需要非常快。 以下给了我一个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 zsh shell 1 个回答 Voted Best Answer Gilles 'SO- stop being evil' 2020-03-06T03:36:57+08:002020-03-06T03:36:57+08:00 使用正则表达式: 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
使用正则表达式:
使用通配符,而不是直接测试是否只有换行符,而是测试是否存在非换行符:
或者简单的 sh 方式:
对于与通配符的正匹配,您需要
#
extendedglob
运算符(相当于正则*
表达式运算符):