Bash or-equals || =喜欢Ruby

时间:2011-07-28 13:28:03

标签: bash command-prompt pwd string-substitution

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 个答案:

答案 0 :(得分:17)

Bash允许使用默认值:

a=${b-`pwd`}

如果未定义$b,则会使用pwd代替$a

答案 1 :(得分:2)

您可以将提示设置为工作目录:

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

答案 2 :(得分:2)

另一个解决方案(在我看来更类似于Ruby的or-equals)将是:

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