Bash或equals | |=像Ruby一样

Bash或equals | |=像Ruby一样,bash,command-prompt,pwd,string-substitution,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是否有类似于| |=

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

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允许使用默认值:

a=${b-`pwd`}

如果未定义
$b
,则在分配
$a
时使用
pwd
,您可以使用以下命令将提示符设置为工作目录:

PS1='\w '   # Using \W will provide just basename
另一个解决方案(在我看来更类似于Ruby或与Ruby相当)是:

[ -n $PWD ] || PWD=`pwd`

虽然我喜欢这种样式,但如果MyVar设置为零长度字符串,在本例中它将不会设置为“value”,而使用bash“default values”和上面的la@Manny D可以说是正确的,比如:`MyVar=${MyVar-'value'}更常见的是,我看到另一种形式:
${PWD:-`PWD`}
我想知道他们是不是equivalent@GregT如果
b
未设置,它们的行为将相同。但是,如果
b
设置为空字符串,则
${b-`pwd`}
将导致空字符串,但
${b:-`pwd`}
将导致工作目录。
[ -n $PWD ] || PWD=`pwd`