Shell

如何檢查變數是否只有換行符

  • March 8, 2020

如何檢查變數$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

使用正則表達式:

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

引用自:https://unix.stackexchange.com/questions/571273