有没有办法在这里的文件中关闭参数扩展?
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
答案 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