Linux 需要修改我的排序管道,使其成为直通(如cat)

Linux 需要修改我的排序管道,使其成为直通(如cat),linux,bash,sorting,Linux,Bash,Sorting,我有一个脚本,作为管道步骤| sort$sortstring |。sortstring包含不同类型的排序,具体取决于脚本的参数。我最近添加了nosort作为参数,我的sortstring是-m(意思是合并和不排序)。这似乎可行,但效率低下。我不想围绕这段代码编写测试,比如if[[$arg==“nosort”];然后执行步骤,对注入的管道进行分类;否则,请执行步骤w sort pipe,因为这些步骤非常复杂(一个大型awk脚本将继续执行)。我可以将“sort$sortstring”变成一个shel

我有一个脚本,作为管道步骤| sort$sortstring |。sortstring包含不同类型的排序,具体取决于脚本的参数。我最近添加了nosort作为参数,我的sortstring是-m(意思是合并和不排序)。这似乎可行,但效率低下。我不想围绕这段代码编写测试,比如if[[$arg==“nosort”];然后执行步骤,对注入的管道进行分类;否则,请执行步骤w sort pipe,因为这些步骤非常复杂(一个大型awk脚本将继续执行)。我可以将“sort$sortstring”变成一个shell变量,并在nosort情况下将这个shell变量设置为“cat”。然而,这是非常复杂的。我想好的编程应该建议虚构脚本(将正在进行的复杂命令放在函数中)。有人能推荐一个有效的替代方案来允许nosort吗?

您可以通过一个
if
语句进行输入,这是一个与其他命令类似的命令

... | if [[ $arg == nosort ]]; then cat; else sort ...; fi | ...

then
elif
else
后面的命令从
if
语句继承其文件描述符。

A(格式良好的)简短代码示例可能有助于澄清if[[$1==“sort5”];然后排序字符串=“-T-k5,5”;fi;如果[$1==“sort3”];然后排序字符串=“-T-k3,3”;fi;如果[[$1==“nosort”];然后排序字符串=“-m”;fi;cat./input | sort$sortstring>/outfielshorter:…|([x$arg=xnosort]| | sort…|…|…|…|…虽然我会使用
。|[“$arg”=nosort]| |排序|……
。(在符合POSIX规范的shell中,
x
hack是不必要的。)是的,它不是。但是记住引号是很重要的,在这种情况下,你无论如何都需要引号<如果
$arg
包含
IFS
字符或glob元字符,则code>x$arg可以扩展为多个单词。([[“$outputsorttype”==“nosort”]]&&cat)| |排序……)我认为你的意思是。没有猫,它似乎不工作