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代わりに が代入に使用され$aます。

于 2011-07-28T13:36:55.693 に答える
2

これを使用して、プロンプトを作業ディレクトリに設定できます。

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

別の解決策 (私の意見では Ruby の or-equals に似ています) は次のようになります。

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