Linux如何排序参数

时间:2013-06-02 06:02:19

标签: linux shell

当我想在-sort之后运行我的参数时,我需要对我提到的所有其他参数进行排序。实施例

. MyScript.sh -sort Tree Apple Boolean

输出应该是

Apple 
Boolean
Tree

我尝试制作一个数组并运行所有参数,但这没有用完

Array=()
while (( "$#" ))
do
  Array += "$1"
  shift
done

这也存在我无法忽略-sort

的问题

3 个答案:

答案 0 :(得分:7)

试试这个脚本:

#!/bin/bash

if [ "$1" = "-sort" ]; then
    shift;
    echo "$@" | tr ' ' '\n' | sort | tr '\n' ' ';
    echo;
else
    echo "$@";
fi

说明:第一个if检查第一个参数是否为-sort。如果是,则移动参数,因此-sort消失,但其他参数仍然存在。然后参数通过tr运行,它将空格分隔列表转换为换行符(sort需要),然后通过sort管道,最后打印排序列表(转换后)回到空格分隔的格式)。如果第一个参数不是-sort,那么它只是按原样打印列表。

答案 1 :(得分:0)

您也可以执行此类操作并根据您的要求添加。 :

#!/bin/bash

if [ "$1" == "-sort" ]; then
    shift;
    my_array=("$@")
    IFS=$'\n' my_sorted_array=($(sort <<<"${my_array[*]}"))
    printf "%s\n" "${my_sorted_array[@]}"
else
    echo "$@"
fi

测试:

[jaypal:~] ./s.sh -sort apple doggie ball cat
apple
ball
cat
doggie

答案 2 :(得分:0)

if [ "X$1" = "X-sort" ]
then shift; printf "%s\n" "$@" | sort
else        printf "%s\n" "$@"
fi

then子句打印参数,每行一个(如果参数包含换行符,则会出现问题),并将参数输入sortelse子句以原始(未排序)顺序列出参数。 X with test的使用可能不是100%必要的,但避免任何误解test(又名[)的论据的可能性。


代码片段的一个问题是+=中的空格:

Array += "$1"

Shell不喜欢赋值运算符周围的空格;你需要写:

Array+="$1"