【问题标题】:Is there a command that works for command line arguments like the sort command does for files?是否有一个命令适用于命令行参数,就像 sort 命令对文件一样?
【发布时间】:2014-03-06 18:08:10
【问题描述】:

我正在尝试在 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

【问题讨论】:

    标签: bash unix scripting


    【解决方案1】:

    试试:

    sorted=$( printf '%s\n' "$@" | sort -rn )
    printf '%s\n' "${sorted//$'\n'/ }"
    

    【讨论】:

    • +1。像这样使用 printf 是每行输出一个事物列表的最安全、最简洁的方法。为了将它们作为单行输出,我很想忽略我自己的赞扬,而只是 echo $sorted(不带任何引号)- 或 sorted=( $(print ...|sort) ); printf "%s " "${sorted[@]}"
    • 谢谢!或:sorted=($(printf '%s\n' "$@"|sort -nr)); printf '%s\n' "${sorted[*]}".
    【解决方案2】:

    您可以从标准输入中给出sort 命令值。它期望每个值都在自己的行上,您可以通过组合 echotr 来实现:

    sorted=$(echo $* | tr ' ' '\n' | sort -rn - | tr '\n' ' ')
    

    仅当您希望结果再次以空格分隔而不是换行分隔时,才需要最后一次调用 tr

    【讨论】:

      【解决方案3】:
      #!/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' ' '
      

      【讨论】:

        【解决方案4】:

        您需要使用命令替换$(...) 来捕获类似命令的输出。

        #!/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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-03
          • 1970-01-01
          • 2021-10-30
          • 1970-01-01
          • 2017-09-22
          • 2020-10-21
          • 2012-04-10
          • 1970-01-01
          相关资源
          最近更新 更多