如何创建一个函数(“sortarr”),它接受数组的参数并返回一个排序的数组?
外壳脚本
echo "Original Numbers in array:"
for (( i = 0; i <= 4; i++ ))
do
echo ${nos[$i]}
done
Run Code Online (Sandbox Code Playgroud)
你没有。你使用sort:
$ echo ${array[@]}
1 8 14 -4 123 12
$ printf '%s\n' "${array[@]}" | sort -n
-4
1
8
12
14
123
Run Code Online (Sandbox Code Playgroud)
并使其成为一个函数:
mysort(){
printf '%s\n' "$@" | sort -n
}
array=(1 8 14 -4 123 12)
mysort "${array[@]}"
Run Code Online (Sandbox Code Playgroud)
如果您真的非常想要,您可以尝试在 bash 中实现排序算法。不过,将头撞在墙上几次可能会更简单。你真的不想用 shell 语言写那种东西。尽管如此,如果你坚持,你可以使用这样的东西(从这里的一个例子中用 bash 重新实现):
mysort(){
for((i=${#array[@]}-1;i>=0; i--)); do
for((j=1;j<=$i; j++)); do
if [[ ${array[j-1]} -gt ${array[j]} ]]; then
temp="${array[j-1]}"
array[j-1]="${array[j]}"
array[j]="$temp"
fi
done
done
}
declare -a array=(1 8 14 -4 123 12)
mysort $array
printf '%s\n' "${array[@]}"
Run Code Online (Sandbox Code Playgroud)
说真的,不要,我再说一遍,不要尝试在 shell 中执行任何严肃的计算任务。有更好的工具。例如,任何体面的脚本语言都已经具有让您排序的方法。例如:
珀尔
$ perl -le '@array=(1,8,14,-4,123,12); print join " ", sort @array'
-4 1 12 123 14 8
Run Code Online (Sandbox Code Playgroud)Python
$ python -c 'array = [1,8,14,-4,123,12]; array.sort(); print(array)'
[-4, 1, 8, 12, 14, 123]
Run Code Online (Sandbox Code Playgroud)