Bash or-equals || = как Ruby - PullRequest
       32

Bash or-equals || = как Ruby

11 голосов
/ 28 июля 2011

Есть ли в Bash что-то вроде || =?

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

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)]\$ '

Ответы [ 3 ]

17 голосов
/ 28 июля 2011

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

a=${b-`pwd`}

Если $b не определено, тогда вместо присвоения $a.

используется pwd.
2 голосов
/ 21 июля 2013

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

[ ! -z $MyVar ] || MyVar='value'
2 голосов
/ 28 июля 2011

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

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