我正在尝试在BASH中编写一个脚本,该脚本将从用户获取1到5个命令行参数,并以反向数字顺序将它们报告回标准输出。我知道唯一与此类似的命令是sort命令,但这仅适用于文件。是否有类似的命令来排序命令行参数?这是我到目前为止所拥有的。
#!/bin/bash
if [ $# -lt 1 ] || [ $# -gt 5 ];
then echo "Incorrect number of arguments!"
else
sorted=sort -rn $*
echo "SORTED: $sorted"
fi
答案 0 :(得分:4)
尝试:
sorted=$( printf '%s\n' "$@" | sort -rn )
printf '%s\n' "${sorted//$'\n'/ }"
答案 1 :(得分:2)
您可以从标准输入中提供sort
命令值。它期望每个值都在自己的行上,您可以通过组合echo
和tr
来实现:
sorted=$(echo $* | tr ' ' '\n' | sort -rn - | tr '\n' ' ')
仅当您希望结果再次以空格分隔而不是换行符分隔时,才需要最后一次调用tr
。
答案 2 :(得分:1)
#!/bin/bash
if [ $# -lt 1 ] || [ $# -gt 5 ];
then echo "Incorrect number of arguments!"
else
sorted=$(echo $* | tr ' ' '\n' | sort -rn | tr '\n' ' ')
echo "SORTED: $sorted"
fi
echo $* | tr ' ' '\n' | sort -rn | tr '\n' ' '
答案 3 :(得分:0)
您需要使用命令替换$(...)
来捕获类似命令的输出。
#!/bin/bash
if [ $# -lt 1 ] || [ $# -gt 5 ]; then
echo "Incorrect number of arguments!"
else
sorted=$(for var in "$@"; do echo "$var"; done | sort -rn | tr -d '\n')
echo "SORTED: $sorted"
fi
$ ./test 1 2 3 4 5
SORTED: 5 4 3 2 1
$ ./test 5 4 3 2 1
SORTED: 5 4 3 2 1