Shell

“cat”命令:如何自動轉義所有可能違規的內容?

  • June 21, 2014

如果你複製的內容

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 命令嗎?

比較以下範例中的兩個 here 文件:

(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)

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

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

輸出

stuff $(pwd)

字面上地。

請參閱 heredocs 上的bash 手冊。終止符字元串中的任何引號都可以防止正文中的任何擴展和替換。

引用自:https://unix.stackexchange.com/questions/138404