Bash or-equals || = как Ruby

Имеет ли Bash что-то вроде || =?

I.e., есть лучший способ сделать следующее:

if [ -z $PWD ]; then PWD=`pwd`; fi

Я спрашиваю, потому что я получаю эту ошибку:

$ echo ${`pwd`/$HOME/'~'}
-bash: ${`pwd`/$HOME/'~'}: bad substitution

Итак, мой план:

if [ -z $PWD ]; then PWD=`pwd`; fi
echo ${PWD/$HOME/'~'}

Мой настоящий вопрос: "Есть ли лучший способ сделать следующее?"

# ~/.bash_profile

# Set prompt to RVM gemset, abbr. of current directory & (git branch).
PROMPT_COMMAND='CUR_DIR=`pwd|sed -e "s!$HOME!~!"|sed -E "s!([^/])[^/]+/!\1/!g"`'
PS1='$(~/.rvm/bin/rvm-prompt g) [$CUR_DIR$(__git_ps1)]\$ '

Ответ 1

Bash позволяет использовать значения по умолчанию:

a=${b-`pwd`}

Если $b - undefined, тогда вместо $a используется pwd.

Ответ 2

Вы можете установить приглашение в качестве рабочего каталога с этим:

PS1='\w '   # Using \W will provide just basename

Ответ 3

Другое решение (более похожее на Ruby или equals, на мой взгляд):

[ ! -z $MyVar ] || MyVar='value'