这里的文件:没有参数扩展

时间:2015-07-05 06:07:43

标签: linux bash shell

有没有办法在这里的文件中关闭参数扩展?

Shell命令:

$ cat > analyze.sh <<EOF    
awk -F: '{print $NF}' asr.log | sort > tmp  
awk -F '(' '{print $NF}' asr.log | awk '{print $1}' |  sort > tmp2
EOF

我在analyze.sh中得到了这个:

awk -F: '{print }' asr.log | sort > tmp
awk -F '(' '{print }' asr.log | awk '{print }' |  sort > tmp2

2 个答案:

答案 0 :(得分:4)

您需要引用分隔符:

$ cat > analyze.sh <<"EOF"    
awk -F: '{print $NF}' asr.log | sort > tmp  
awk -F '(' '{print $NF}' asr.log | awk '{print $1}' |  sort > tmp2
EOF

这可以防止shell扩展here-document:

$ cat analyze.sh 
awk -F: '{print $NF}' asr.log | sort > tmp  
awk -F '(' '{print $NF}' asr.log | awk '{print $1}' |  sort > tmp2

文档

man bash中记录了这一点:

  

here-documents的格式为:

          <<[-]word
                  here-document
          delimiter
     

不对字执行参数和变量扩展,命令替换,算术扩展或路径名扩展。 如果   引用任何单词中的字符,          分隔符是单词上引号删除的结果,而here-document中的行不会被展开。如果单词没有引用,则全部   这里的文件行是          受到参数扩展,命令替换和算术扩展,字符序列\被忽略,   和\必须用来引用          characters \,$和`。 [强调补充]

答案 1 :(得分:4)

您可以引用EOF来禁用扩展:

cat > analyze.sh <<'EOF'
awk -F: '{print $NF}' asr.log | sort > tmp  
awk -F '(' '{print $NF}' asr.log | awk '{print $1}' |  sort > tmp2
EOF