변수에 개행 문자만 포함되어 있는지 확인하는 방법

변수에 개행 문자만 포함되어 있는지 확인하는 방법

$last_cmdZsh의 변수에 줄 바꿈만 포함되어 있고 다른 내용은 없는지 확인하는 방법은 무엇입니까 ?

이상적으로 이는 대체를 통해 수행됩니다. 이는 프롬프트 스크립트의 일부이고 매우 빨라야 하기 때문입니다.

다음은 나에게 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

관련 정보