如何检查$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
答案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