当我想在-sort
之后运行我的参数时,我需要对我提到的所有其他参数进行排序。实施例
. MyScript.sh -sort Tree Apple Boolean
输出应该是
Apple Boolean Tree
我尝试制作一个数组并运行所有参数,但这没有用完
Array=()
while (( "$#" ))
do
Array += "$1"
shift
done
这也存在我无法忽略-sort
。
答案 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
子句打印参数,每行一个(如果参数包含换行符,则会出现问题),并将参数输入sort
。 else
子句以原始(未排序)顺序列出参数。 X
with test
的使用可能不是100%必要的,但避免任何误解test
(又名[
)的论据的可能性。
代码片段的一个问题是+=
中的空格:
Array += "$1"
Shell不喜欢赋值运算符周围的空格;你需要写:
Array+="$1"