因此,我正在开发一个 UNIX 课程的项目,我们正在一步一步地遵循书中的说明。我最近遇到一个问题,我们在 shell 脚本中创建多个函数,但我无法让它正常运行,即使我的代码与它所说的相同。
一些背景: - 源目录存在 - 该目录中存在文件 corp_phones - 我在尝试使用该函数之前已加载该函数
这是我的脚本:
sort_name()
{
sort +1 -t: ~/source/corp_phones
}
sort_date()
{
sort +6 -t: ~/source/corp_phones
}
sort_dept()
{
sort +4 -t: ~/source/corp_phones
}
答案1
简而言之,您用于排序的语法来自旧版本的 POSIX。来自coreutils 排序手册:
在不符合 POSIX 1003.1-2001 的系统上,排序支持传统的原点零语法“+pos1 [-pos2]”来指定排序键。如果 y 为“0”或不存在,传统命令“sort +ax -b.y”相当于“sort -k a+1.x+1,b”,否则相当于“sort -k a+1.x” +1,b+1.y'。
这种传统行为可以使用 _POSIX2_VERSION 环境变量进行控制(请参阅标准一致性);当未使用带有“-pos2”的传统语法设置 POSIXLY_CORRECT 时,也可以启用它。
用于标准主机的脚本应避免传统语法并应使用 -k 代替。
虽然可以恢复传统行为,但使用更新的语法更加简单。
该+1
选项定义从第二个字段到行尾的排序键。等效的新选项是-k 2
.因此,您应该使用的新sort
命令分别是:
sort -k 2 -t: ~/source/corp_phones
sort -k 7 -t: ~/source/corp_phones
sort -k 5 -t: ~/source/corp_phones