2014-03-24 62 views
-1

我需要在打印bash之前更改字符串。所以我做:Bash字符串更改部分字

${RETEZEC//./D} 

現在我需要改變一兩件事,-_。但不知道如何添加它?在$`{RETEZEC //./ D; // -/_}之類的同一步驟中,我需要一個額外的豁免 - ?

+0

有回聲 「$ {RETEZEC //./ d}」 – Vrsi

+3

而不是評論你的答案,用相關信息更新你的問題。 – fedorqui

回答

1

這不是可以嵌套參數擴展,需要兩個表達式:

foo=${RETEZEC//./D} 
echo "${foo//-/_}" 

你可以,但是,使用外部工具來做到這一點,但我會建議堅持上面的本地shell解決方案。

$ echo "foo.-bar" | tr '.-' 'D_' 
fooD-bar 
+0

對,我可以做一個例外嗎?就像有一個 - 我不想改變,但其他人是。 – Vrsi

+0

@Vrsi更新你的問題與你的實際需求,你在這裏非常模糊。 –

+2

方括號不應該存在'tr'。 – kojiro

1

您可以使用:

s='abc-def-foo' 
echo "${s//-/_}" 
abc_def_foo 
+0

是的,但我想一步改變。對於D和 - 對於_ – Vrsi

+2

@Vrsi這不可能使用參數擴展。 –

2

它看起來像你想與D-_更換.

正如其他人評論,你不能只在一個步驟。但是你可以使用tr

$ echo "$RETEZEC" 
hel-lo_a.b. 
$ tr '.-' 'D_' <<< "$RETEZEC" 
hel_lo_aDbD 

如果你想存儲在同一個變量的輸出,這樣做:

$ RETEZEC=$(tr '.-' 'D_' <<< "$RETEZEC") 
$ echo $RETEZEC 
hel_lo_aDbD