comm和diff命令的Bash Shell Systax错误

时间:2017-04-03 13:12:32

标签: bash shell

我正在尝试使用" comm"比较2个文件并保存它们之间的差异在第三个文件中,如下例所示。

if [ -e "$updated_file_name_$day$month$year.txt"];
then
    comm -3 < (sort $updated_file_name".txt") < (sort $updated_file_name_$day$month$year.txt) > $updated_file_name_$day$month$year_V$i.txt
else
    mv $updated_file_name".txt" $updated_file_name_$day$month$year.txt
fi

它搜索文件或文件的先前版本,如果它找到了比两个文件都要进行排序和比较,则结果将保存在第三个文件中,否则它只是将新文件保存为原始文件那个日期。

我在shell控制台上使用它作为&#34; bash -c&#39; comm -3 [其余命令]&#34;并且它有效,但无论出于何种原因它都不能处理我的脚本,我总是得到错误的语法错误。

我也尝试使用&#34; diff而不是&#34; comm&#34;但我也一样,我不知道问题是什么。

以下是错误消息:

bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `diff < (sort $updated_file_name".txt") < (sort $updated_file_name"_"$day$month$year.txt) > $updated_file_name"_"$day$month$year_V$i".txt"'

1 个答案:

答案 0 :(得分:3)

这里要解决的事情很多,

  1. <()进程替换bash功能,您可能需要使用适当的she-bang设置运行它,即#!/bin/bash或依赖于您的发行版,bash已安装
  2. 应该没有空格,即使用comm -3 <(sort $updated_file_name".txt") <(sort $updated_file_name_$day$month$year.txt)是正确的方法。
  3. 另一个OP的问题是sort无法打开文件,在此期间收到错误。

    建议,在{}

    中正确包含变量
    comm -3 <(sort ${updated_file_name}".txt") <(sort ${updated_file_name}_${day}${month}${year}".txt")