Bash 또는 zsh 조건부 패턴 및 변수 확장

Bash 또는 zsh 조건부 패턴 및 변수 확장

특정 변수를 기반으로 파일 이름을 생성한다고 가정해 보겠습니다.

track=01
title="Some title"
album="Some album"
echo ${track}. ${title} (${album})

-> 01. Some title (Some album)

이제 케이스가 $album비어 있으면 얻을 수 있습니다.

->01. Some title ()

이 경우에는 괄호를 제거하고 싶습니다.

->01. Some title

내가 원하는 것은푸바이와 같이:

%길%. %제목% [(%앨범%)]

bash(또는 zsh)에서 if...fi를 사용하지 않고 위와 같은 단일 표현식으로 수행하는 것이 가능합니까?

답변1

bash: 응, 하지만 별로 예쁘지는 않아:

filename="${track}. ${title}${album:+ ($album)}"

${var:+value}$var가 설정되어 있고 비어 있지 않은 경우 "값"으로 확장됩니다 .

시연:

$ album="Some album"
$ filename="${track}. ${title}${album:+ ($album)}"
$ declare -p filename
declare -- filename="01. Some title (Some album)"

$ album=""
$ filename="${track}. ${title}${album:+ ($album)}"
$ declare -p filename
declare -- filename="01. Some title"

$ unset album
$ filename="${track}. ${title}${album:+ ($album)}"
$ declare -p filename
declare -- filename="01. Some title"

참조:3.5.3 쉘 매개변수 확장

관련 정보