【问题标题】:Sorting integers in Bash Shell Script with command line arguments as arguments to the sort fn?在 Bash Shell 脚本中使用命令行参数对整数进行排序作为排序 fn 的参数?
【发布时间】:2012-01-08 17:54:25
【问题描述】:

我的问题是,如果允许的参数数量是一个变量,我该如何遍历命令行参数:

示例:

./sort.sh n <n integers to sort>
./sort.sh 5 3 4 2 1 5

我尝试通过 for 循环对其进行迭代并将其放入 .txt 文件中以用于排序函数,但这会带来问题,因为分隔符(例如 i)只接受常量。

谢谢。 :D

【问题讨论】:

  • 您好,以下是忽略 $1 或决定输入大小的第一个参数的答案。如何根据第一个参数对以下参数进行排序?

标签: bash shell sorting command-line command-line-arguments


【解决方案1】:
echo 2 4 3 1 5 | fmt -s -w 1 | sort -n

喜欢这样吗?

【讨论】:

  • 要排序的整数参数的数量是可变的。可以说,10个整数。 :D 我需要以某种方式解析它。我尝试了 $i 并遍历 i ,但没有奏效。
  • 但这不是多余的吗,你不能跳过它吗?或者你当然可以head -n $n fmt 输出。或者你可以for((i=0;i&lt;$n;++i))任何你想要的。
【解决方案2】:

您不需要参数的数量。您可以使用 $# 从脚本中获取它。

而且您不需要遍历参数。只需将它们每行一个传递给sort -n

类似:printf "%s\n" $@ | sort -n

【讨论】:

  • 谢谢。我想我会试试这个。 :D
  • @mouviciel,如何根据决定输入大小的第一个参数对以下参数进行排序?
  • @ThisGuy - 如果第一个参数与后面参数的个数不一致怎么办?
  • 嗨,如果您不想要下一行而只想要一个空格怎么办?你怎么能实现 printf "%s\n" $@ |排序 -n?尝试添加空间,但没有用
  • @WonderingCoder,您需要在整个命令printf "%s\n" $@ | sort -n 的结果中用空格替换换行符。一种方法是让echo 完成工作:echo $(printf "%s\n" $@ | sort -n)
猜你喜欢
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 2014-10-10
  • 2012-10-25
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
相关资源
最近更新 更多