请告诉我如何使用 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)
谢谢你的帮助!
如果您允许使用该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'
您可以将 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)
数组更适合存储事物列表:
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)