Shell
如何檢查變數是否只有換行符
如何檢查變數
$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