防止bash解释而不引用所有内容

时间:2012-03-26 09:45:25

标签: bash

我需要输出一些文本作为bash脚本,但是在脚本中。我为此使用了猫,但它有一个缺点。 在写入期间解释变量和内容。我确实希望阻止此

如何做到而不引用所有变量(我的脚本长得太长)?实施例

cat >/tmp/script << EOF
  $HOSTNAME
  # lots of other stuff I do NOT want to escape like \$VARIABLE
  # ...
EOF

cat /tmp/script
myhostname.mylan

我想:

cat /tmp/script
$HOSTNAME

编辑:请注意我的脚本(此处仅 $ HOSTNAME )非常长,我不想更改它。使用&lt;&lt;

时,单引号不起作用
cat >/tmp/script '<< EOF
  $HOSTNAME
EOF'
File not found: EOF'

诀窍是什么?感谢。

4 个答案:

答案 0 :(得分:71)

如果你想要引用的所有内容:

cat << 'EOF'
stuff here with $signs is OK
as are `backquotes`
EOF

请参阅手册中“此处文件”部分。

答案 1 :(得分:3)

逃离$:

cat >/tmp/script << EOF
  \$HOSTNAME
EOF

答案 2 :(得分:1)

使用sed:

 sed -n '20,30p' "$0" 

打印第20至30行,SSCE:

#!/bin/bash
cat >/dev/null << EOF
 3
 4 $HOSTNAME
 5 ls 
 6 $(ls -l) 
 7
 8 echo 'foo
 9 bar' 
 10
 11 echo "Foo
 12 $((4+4)) Bar" 
EOF
sed -n '3,12p' "$0"
echo "fine?"

使用头/尾也应该工作。

您必须调整数字,如果您使用它并插入或删除行。

答案 3 :(得分:0)

尝试使用echo:

echo '
$HOSTNAME
...
' >> /tmp/script