11

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

3 回答 3

19

Bash 允许使用默认值:

a=${b-`pwd`}

如果$b未定义,则pwd在分配时使用 then 代替$a

于 2011-07-28T13:36:55.693 回答
2

您可以使用以下命令将提示设置为工作目录:

PS1='\w '   # Using \W will provide just basename
于 2011-07-28T16:32:36.433 回答
2

另一个解决方案(在我看来更类似于 Ruby 的或等于)是:

[ -n $PWD ] || PWD=`pwd`
于 2013-07-20T21:46:27.647 回答