Проблема в строке:
if [ $#=3 ]
Поскольку у вас нет пробелов вокруг =
, он обязательно выполняет:
if [ -n $#=3 ]
test, который всегда будет верным как = 3
всегда там, поэтому else
никогда не сработает.
Вам необходимо использовать пробелы вокруг =
:
if [ $# = 3 ]
Также используйте двойные кавычки при раскрытии переменных, чтобы избежать разделения слов и расширения имени пути, хотя это не обязательно в случае $ #
, хотя .
Возьмем массив A
как
A=(h4 h5 h1 h2 h3)
Теперь проблема с командой sort
заключается в том, что она сортирует элементы в разных строках и не может сортировать элементы в одной строке. Таким образом, обходной путь состоит в том, чтобы преобразовать массив в элемент на строку и отсортировать с помощью sort
и поместить их в массив, который фактически отсортирован, то есть
B=(`echo ${A[@]} | tr " " "\n" | sort`)
Теперь B — отсортированный массив. Здесь tr
преобразует пробел в новую строку
Попробуйте это,
Просто распечатайте, отсортируйте и сохраните значения в одном имени массива.
ary=(h4 h5 h1 h2 h3)
ary=(`printf '%s\n' "${ary[@]}"|sort`)
echo ${ary[@]}
h1 h2 h3 h4 h5
Нет необходимости использовать tr
; «Расширение параметров» оболочки с адекватнымIFS
(в подоболочке )должно быть достаточно. Попробуйте
$ ARR=(h4 h5 h1 h2 h3)
$ SA=( $(IFS=$'\n'; echo "${ARR[*]}" | sort) )
$ BRR=(s4 h5 q1 h2 g3)
$ SB=( $(IFS=$'\n'; echo "${BRR[*]}" | sort -k1.2) )
$ echo "${SB[*]}"
q1 h2 g3 s4 h5