使用文件结束符(EOF)时未正确输入变量$1记录
正常我们使用cat
和重定向符号>
结合EOF
输入文件时,会按照输入的格式记录在文件中,不用使用编辑器打开就可以输入文件,非常方便,但是当输入的字符中含有变量时却不会输入进去,如下
[root@jtmp]# cat >script.awk <<EOF
> {
> print $1
> }
> EOF
[root@j tmp]# cat script.awk
{
print
}
我们可以看到输入的文件中并没有最初输入的变量$1
这是因为在使用bash shell中,当使用<<EOF
来创建一个文本块时,shell会尝试解析文本块中的变量,在上面的命令中,因为上下文并没有为变量$1
赋值,所以它被替换成一个空字符串,如果就想在文件输入字符$1
,可以为EOF加上引号,这样在输入的时候就不会解析变量了,如下:
cat >script.awk <<'EOF'
{
print $1
}
EOF