我想分別將@
和.
分別替換爲\@
和\.
。現在我解決這個使用下列內容:我可以同時在一個參數中做兩個(或多個)替換嗎?
str="@foo.bar.baz"
str=${str//"."/"\."}
str=${str/"@"/"\@"}
echo $str
我可以縮短這個?
我想分別將@
和.
分別替換爲\@
和\.
。現在我解決這個使用下列內容:我可以同時在一個參數中做兩個(或多個)替換嗎?
str="@foo.bar.baz"
str=${str//"."/"\."}
str=${str/"@"/"\@"}
echo $str
我可以縮短這個?
使用sed
:
echo "@foo.bar.baz"|sed 's/[@.]/\\&/g'
工程,但它比OP給出的三線式更慢。 –
根據要求,這當然*更短*,但你真的應該指出缺點(假設它不是代碼高爾夫問題)。 –
@CharlesDuffy它取決於輸入字符串的長度,對於較短的字符串bash會更快,對於真正長的字符串,'sed'實際上會更快。 – zeppelin
這立即引發了一個問題,爲什麼* *你(認爲你)要做到這一點? – chepner
我從數據庫中獲得原始str,需要像我在某些守護程序配置中的OP中描述的那樣使用它。這有什麼問題嗎? – oneohthree
請注意,更詳細的代碼也是更高效的代碼。 –