2017-12-12 4 views
3

1つのステートメント内に2つのBash置換がありますか?あなたはこれで空または未定義の変数を置き換えることができますbashで

${myvar:-replacement} 

ます。また、このような変数に部分文字列を置き換えることができます。

${myvar//replace this/by this} 

は今、私は1つに両方の置換を組み合わせたい:場合変数が定義されていない場合はreplacementに設定し、そうでなければその一部を別のものに置き換えます。

これを問題なく2行に書き込むことができます。

myvar=${myvar:-replacement} 
myvar=${myvar//replace this/by this} 

またはより密接に私のビジネス・ロジックを反映する:

if [[ -n "${myvar:-}" ]]; then 
    myvar="${myvar//replace this/by this}" 
else 
    myvar="replacement" 
fi 

1つのステートメント/ 1ラインに両方の置換を結合する方法はありますか?

私は成功せず、これを試してみました:私は、未定義の変数を使用するとき、彼らが出てエラーように私は私のスクリプトでset -uを使用しています

myvar=${${myvar:-replacement}//replace this/by this} # bad substitution 

。だから私は未定義のvarの最初のサブが必要です。

+1

これは私の知る限りbash' 'で – Inian

+1

なぜ我々はできません常に1つの行で物事をしたいですか?それが可読で醜くないなら、それをそのままにしておいてください。 – Maroun

+0

@MarounMarounあなたが正しいかもしれません。私はちょうどスペースで区切られた1つの行に両方の文を書くことができたことに気づいた。しかし、それが読めるようにするのが簡単かどうか分かりません。 –

答えて

2

私が知る限り、これはBashでは不可能です。

あなたができる最善のことは、複数の行にそれらを書いている、またはNOPコマンドを使用するか、またはユーティリティを使用します。

myvar=${myvar:-replacement} 
myvar=${myvar/src/dest} 
myvar=$(sed 's/src/dest/g' <<< ${myvar:-defaulttext}) 
関連する問題