「cat」指令:如何自動轉義所有可能違規的內容?

「cat」指令:如何自動轉義所有可能違規的內容?

如果您複製內容

httpd.conf

然後將其貼到 cat 指令中..例如這個..

#!/bin/bash
cat > /test << EOF
pasted here..
EOF

你遇到這個錯誤:

-bash: command substitution: line 1: unexpected EOF while looking for matching `''
-bash: command substitution: line 4: syntax error: unexpected end of file

也許解決方案是逃避美元符號,甚至可能是引號等等。

但鑑於這是一個如此大的文件..美元符號可以自動轉義嗎?

我唯一的選擇是透過另一個程式轉義它們然後將其交給 cat 命令嗎?

答案1

在“EOF”字串周圍使用引號:

cat > /test <<'EOF'
stuff $(pwd)
EOF

輸出

stuff $(pwd)

字面上地。

請參閱bash手冊在此文件上。終止符字串中的任何引號都會阻止正文中的任何擴展和替換。

答案2

在以下範例中比較此處的兩個文件:

(yeti@darkstar:6)~/wrk/tmp$ cat ./xyzzy 
#!/bin/bash
cat << EOF
Version 1 - Today is $(date)
EOF
cat << 'EOF'
Version 2 - Today is $(date)
EOF
(yeti@darkstar:6)~/wrk/tmp$ ./xyzzy 
Version 1 - Today is Sa 21. Jun 08:51:38 CEST 2014
Version 2 - Today is $(date)

相關內容