如何在bash中对数组进行排序?

时间:2018-03-06 21:04:19

标签: arrays bash shell scripting

例如,如果我想编写一个将字符串作为参数的脚本,并且我希望将它们插入到数组array_of_args ,然后我想对此数组进行排序并进行制作排序数组。

我该怎么办?

我想以下一种方式对数组进行排序(并将其打印到stdout):

array_of_args=("$@")
# sort_array=()
# i=0
    for string in "${array_of_args[@]}"; do
        echo "${string}"
    done | sort

但我不知道如何将排序值插入数组(到sort_array)..

1 个答案:

答案 0 :(得分:1)

您可以使用以下脚本对可能包含空格,换行符,glob字符或任何其他特殊字符的输入参数进行排序:

#!/usr/bin/env bash

local args=("$@") # create an array of arguments
local sarr=()     # initialise an array for sorted arguments

# use printf '%s\0' "${args[@]}" | sort -z to print each argument delimited
# by NUL character and sort it

# iterate through sorted arguments and add it in sorted array
if (( $# )); then
   while IFS= read -rd '' el; do
      sarr+=("$el")
   done < <(printf '%s\0' "${args[@]}" | sort -z)
fi

# examine sorted array
declare -p sarr