2014-02-24 85 views
6

在Ubuntu,我想與讀取磁盤文件,結束了:逸出Unix系統中的美元符號cat命令裏面

foo $(bar) 

我想用cat命令來創建這個文件,例如

cat <<EOF > baz.txt 
type_magic_incantation_here_that_will_produce_foo_$(bar) 
EOF 

問題是美元符號。我嘗試了反斜槓,單引號和雙引號字符的多種組合,並且無法使其工作。

+0

的可能的複製[如何貓<>包含代碼的文件?在shell](https://stackoverflow.com/questions/22697688/how-to-cat-eof-a-file-containing-code-in-shell) – tripleee

回答

12

您可以在這裏文檔使用常規引用運算符:

$ cat <<HERE 
> foo \$(bar) 
> HERE 
foo $(bar) 

,或者你可以引述這裏-doc的分隔符禁用擴展:

$ cat <<'HERE' # note single quotes 
> foo $(bar) 
> HERE 
foo $(bar) 
+0

這也有幫助。我不知道這些被稱爲「這裏的文件」。 –

+0

這是更好的答案。我終於明白,我的問題出現了,因爲我需要防止*嵌套*轉義。這是更清潔的解決方案。 –

1

反斜槓('\')適用於我。我試過了,這裏是輸出:

$ cat <<EOF > tmp.txt 
foo \$(abc) 
EOF 

$ cat tmp.txt 
foo $(abc) 

我在bash上試了一下。我不確定是否必須在其他shell中使用不同的轉義字符。

+0

謝謝。我不知道我做錯了什麼! –