$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