Bash - 对字符串列表进行排序

Hun*_*ran 2 sorting bash list

请告诉我如何使用 Bash 对以下列表(从 A 到 Z 升序)(或一般列表)进行排序?

我一直在尝试,但仍然无法得到预期的结果:

my_list='a z t b e c'
Run Code Online (Sandbox Code Playgroud)

结果也应该是一个列表,因为我将它用于 Select Loop。

my_list='a b c e t z'  
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Ren*_*rdo 7

如果您允许使用该sort程序(而不是在 中编写排序算法bash),则答案可能如下所示:

my_list='a z t b e c'
echo "$my_list" | tr ' ' '\n' | sort | tr '\n' ' '
Run Code Online (Sandbox Code Playgroud)

结果: a b c e t z'


Ale*_*iff 7

您可以将 xargs 与内置sort命令一起使用两次来完成此操作。

$ my_list='a z t b e c'
$ my_list=$(echo $my_list | xargs -n1 | sort | xargs)
$ echo $my_list
a b c e t z
Run Code Online (Sandbox Code Playgroud)


Pes*_*The 5

数组更适合存储事物列表:

list=(a z t b "item with spaces" c)

sorted=()
while IFS= read -rd '' item; do
    sorted+=("$item")
done < <(printf '%s\0' "${list[@]}" | sort -z)
Run Code Online (Sandbox Code Playgroud)

bash 4.4可以使用readarray -d

list=(a z t b "item with spaces" c)

readarray -td '' sorted < <(printf '%s\0' "${list[@]}" | sort -z)
Run Code Online (Sandbox Code Playgroud)

要使用数组创建一个简单的菜单select

select item in "${sorted[@]}"; do
    # do something
done
Run Code Online (Sandbox Code Playgroud)