2012-10-29 11 views
2

在Solaris上,看來我需要單引號表達式「匹配行的開頭」:^(caret)在solaris(bourne?)sh中的特殊含義

> sh 
$ echo offset 0.000000 2>&1 | grep '^offset'| tail -1 
offset 0.000000 

我不:

> sh 
$ echo offset 0.000000 2>&1 | grep ^offset | tail -1 
offset: not found 
$ Usage:  grep [-c|-l|-q] [-bhinsvwx] pattern_list [file ...] 
     grep [-c|-l|-q] [-bhinsvwx] [-e pattern_list]... [-f pattern_file]... [file...] 
     grep -E [-c|-l|-q] [-bhinsvx] pattern_list [file ...] 
     grep -E [-c|-l|-q] [-bhinsvx] [-e pattern_list]... [-f pattern_file]... [file...] 
     grep -F [-c|-l|-q] [-bhinsvx] pattern_list [file ...] 
     grep -F [-c|-l|-q] [-bhinsvx] [-e pattern_list]... [-f pattern_file]... [file...] 

我可以用單引號的正則表達式解決這個問題很輕鬆了在我使用bash的自己的命令行中沒有看到它,但是它顯示在腳本中,例如使用system()的perl腳本。

缺省的Solaris shell是Bourne shell嗎? ^(插入符號)在shell語言中對於默認的Solaris shell有什麼其他含義?

回答

5

我相信bourne shell中的'^'被允許作爲向後兼容的版本/等同於'|'焦炭。

而你所看到的消息似乎支持這種解釋。

確認,製作一個測試腳本offset只是打印'抵消'看。

IHTH(向後什麼是這個醇」 SunOS3編碼的/dev/null ;-)失去兼容)。

+0

顯然,向後兼容從1973年的[Unix版本4湯普森殼牌](https://en.wikipedia.org/wiki/Thompson_shell)。 – alanc

+0

好去知道!感謝分享。 – shellter

相關問題