Bash or-equals || =喜欢Ruby

ma1*_*w28 11 bash command-prompt string-substitution pwd

Bash有类似|| =的东西吗?

即,是否有更好的方法来执行以下操作:

if [ -z $PWD ]; then PWD=`pwd`; fi
Run Code Online (Sandbox Code Playgroud)

我问,因为我收到此错误:

$ echo ${`pwd`/$HOME/'~'}
-bash: ${`pwd`/$HOME/'~'}: bad substitution
Run Code Online (Sandbox Code Playgroud)

所以,我的计划是:

if [ -z $PWD ]; then PWD=`pwd`; fi
echo ${PWD/$HOME/'~'}
Run Code Online (Sandbox Code Playgroud)

我真正的问题是:"有更好的方法来做以下事情吗?"

# ~/.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)]\$ '
Run Code Online (Sandbox Code Playgroud)

Man*_*y D 17

Bash允许使用默认值:

a=${b-`pwd`}
Run Code Online (Sandbox Code Playgroud)

如果$b未定义,则pwd用于分配$a.

  • @GregT如果`b`未设置,它们的行为将相同.但是,如果`b`设置为空字符串,则`$ {b- \`pwd \`}`将导致空字符串,但`$ {b: - \`pwd \`}`将导致工作目录. (2认同)