Bash或equals | |=像Ruby一样
Bash是否有类似于| |= 也就是说,是否有更好的方法来执行以下操作: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/'~'} 我真正的问题是:“有没有更好的方法来做以下
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`