Answers:
我怀疑您的脚本和外壳程序不同。也许您#!/bin/sh
最先将脚本作为解释器,但您正在将其bash
用作个人外壳。您可以通过运行找出在终端中运行的shell echo $SHELL
。
可以在大多数Shell上使用的更简单的方法是使用管道重定向,而不是您提供的文件读取运算符。符号“-”是用于读取STDIN的标准命名法,通常可以用来代替参数列表中的文件名:
cat file2 | sort | diff file1 -
或避免无用的使用猫:
sort < file2 | diff file1 -
-R
在使用的情况下git diff --no-index
diff - file1
。
git diff
。
git diff
是完全不同的野兽,并且在其内部索引(而非文件)中引用对glob对象的引用;diff
在文件系统上运行。该-
语法只是外壳句法糖/dev/stdin
,较标准输入流的文件。因此,为什么diff
可以用它代替文件名。同时git diff
,它不是在查找文件,而是在查找对象,因此您必须将其可以识别的内容传递给它。不要使用它来相互比较文件,请使用diff
它。
标准输入的范围是脚本本身,因此只需将您的代码放入如下代码块中:
{
diff file1 <(sort file2)
}
这样,STDIN的作用域就位于块内。
我已经尝试过并且有效。
<(…)
构造的有效性没有任何影响。您的脚本是否有效取决于您是否在支持该脚本的shell中运行该脚本<(…)
(ksh93 / bash / zsh与Bourne / ash / kshk88)。卡勒布(Caleb)的回答将这一切都钉住了。