$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