什么是 *.sorted 命令?为什么它在我的 bash 中不起作用?

什么是 *.sorted 命令?为什么它在我的 bash 中不起作用?

在一个Bash 初学者指南(秒。3.2.1.2.局部变量)有一个示例命令应该列出所有不在环境变量中的局部变量,或者我认为:

diff set.sorted printenv.sorted | grep "<" | awk '{ print $2 }'

我相信我了解这个命令的所有内容,除了这一*.sorted部分。此外,该命令在我的 Bash 上不起作用,特别是由于上述因素。这是回复(这是波兰语版本没有这样的文件或目录):

diff: set.sorted: Nie ma takiego pliku ani katalogu
diff: printenv.sorted: Nie ma takiego pliku ani katalogu

值得注意的是,我使用的是 Ubuntu 14.04,其默认安装几乎没有任何更改。

因此,我无法在 Bash shell 中分析此命令,除了我从中获取此命令的教程之外,我也无法在 Google 上找到任何有关此命令的信息。

我将不胜感激您的全面解释,因为我以前从未遇到过这样的表达方式。

答案1

它们不是表达式,它们是生成的文件的文件名,如下所示:

 printenv | sort > printenv.sorted
 set | sort > set.sorted

文档中没有明确说明这一点,因此您的困惑是可以理解的!

请注意,您可能需要帮助diffgrep强制他们将输入视为文本(带有-a);环境变量可以包含导致它们将输入视为二进制的值,这不会产生任何有用的东西:

diff -a set.sorted printenv.sorted | grep -a "<" | awk '{ print $2 }'

更好的是,使用comm来比较两个文件:

comm -23 set.sorted printenv.sorted

您可以使用进程替换来替换文件:

comm -23 <(set|sort) <(printenv|sort)

以避免创建文件。

相关内容