sed的替換內容,我可以用sed從tcsh的是這樣的:與明星
set a = `echo $a | sed -e 's_old_new_'`
一切都很好,但是當我想這樣做:
set a = `echo $a | sed -e 's_old_*new_'`
我可以看到「設置:無比賽。」 。我如何逃脫這顆明星?
sed的替換內容,我可以用sed從tcsh的是這樣的:與明星
set a = `echo $a | sed -e 's_old_new_'`
一切都很好,但是當我想這樣做:
set a = `echo $a | sed -e 's_old_*new_'`
我可以看到「設置:無比賽。」 。我如何逃脫這顆明星?
我不知道很多關於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_'`"
未包括在雙引號的命令取代(`
$(..)
或)受到文件名擴展(又名「通配」)和分詞。
通常情況下,一個變量賦值會抑制文件名擴展和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在這方面表現出類似的行爲。
你剛剛想要做什麼以及最初的$ a的示例內容是什麼? –
準確地說,我想將給定的數字轉換爲我可以在bc中使用的數字。 $ a的示例內容:2,2.0,2.2,2e2,+ 2e + 2等。我的sed看起來像這樣:set a ='echo $ a | sed -e's_ [DdEeQ] [+ - ] \?_ * 10^_'' – Arvangen