2012-10-27 41 views
1

sed的替換內容,我可以用sed從tcsh的是這樣的:與明星

set a = `echo $a | sed -e 's_old_new_'` 

一切都很好,但是當我想這樣做:

set a = `echo $a | sed -e 's_old_*new_'` 

我可以看到「設置:無比賽。」 。我如何逃脫這顆明星?

+0

你剛剛想要做什麼以及最初的$ a的示例內容是什麼? –

+0

準確地說,我想將給定的數字轉換爲我可以在bc中使用的數字。 $ a的示例內容:2,2.0,2.2,2e2,+ 2e + 2等。我的sed看起來像這樣:set a ='echo $ a | sed -e's_ [DdEeQ] [+ - ] \?_ * 10^_'' – Arvangen

回答

3

我不知道很多關於tcsh的,但很少實驗表明設定爲變量賦值試圖擴大右側*。這可能有所幫助:

set a="`echo '2e2' | sed -e 's_e_*_'`" 
echo "$a" 
2*2 
echo $a 
echo: No match. 

因此,雙引號後面的引號,它會工作。

set a = "`echo $a | sed -e 's_old_new_'`" 
0

未包括在雙引號的命令取代(`$(..)或)受到文件名擴展(又名「通配」)和分詞。

通常情況下,一個變量賦值會抑制文件名擴展和RHS的分詞(甚至沒有雙引號),但顯然不是filename在命令替換的情況下擴張。

這是一個測試,我跑供參考:

$ touch randomfile 
$ a="*file" 
$ var_expand=$a 
$ echo "$var_expand" 
*file 
$ 
$ cmd_subst=$(echo '*file') 
$ echo "$cmd_subst" 
randomfile 

所以我想這是很好的做法,總是雙引號的命令替換,當你分配給變量。

safe="$(cmd)" 

注意:這是在Bash中測試的,但我認爲tcsh在這方面表現出類似的行爲。