2009-11-02 65 views
0

我試圖找到其中兩個變量在腳本的目錄中被連接在一起,但是當我嘗試以下方法:

grep -lire "$DATA_PATH . $AWARDS_YEAR" * 

我得到「未定義的變量」錯誤...

我想我可以通過使用逃脫$ S:

​​

,但我得到了同樣的錯誤 - 這樣,你怎麼用grep與$ s的字符串中?

回答

6

Tcsh與通常的shell有些不同,它是FreeBSD的默認設置。

所以,僅僅使用單引號,'$VAR',或逃避引號的$外:\$"VAR"

+0

使用單引號是最接近可移植的解決方案 - 它可以在Unix上的大多數shell上運行類系統。 (Windows是一個單獨的討論。) – 2009-11-03 00:08:19

+0

做了伎倆 - 謝謝 – HorusKol 2009-11-03 10:32:38

2

把它放在單引號,用逸出斜線:

grep -lire '\$DATA_PATH . \$AWARDS_YEAR' * 

還要注意,該點是一個正則表達式字符()。如果你不想要它,也可以逃避它(或者不要使用-e選項)。

這是一個nice reference與更一般的信息。

+0

其實用''\ $ VAR''會產生一個字符串,在每個shell我在一個真正的反斜槓我知道,包括tcsh,這是他的Freebsd系統上的默認值。反斜槓不會阻止他的grep工作,但我必須認爲它不是有意的。 – DigitalRoss 2009-11-02 23:59:12

+0

我認爲這就是我們想要的 - 一個實際的美元符號作爲正則表達式的實際反斜槓 – 2009-11-03 00:02:52

+0

好的,如果這是真的是你的意思。我刪除了downvote。 (不得不編輯你的答案。)但請記住'$'對grep來說並不神奇,除了在模式結尾處。 – DigitalRoss 2009-11-03 00:07:15

相關問題