Влияют ли параметры и имя на команду в Linux?

Я бы не советовал анализировать вывод ls, find и т. д. (см. ParsingLs — Wiki Грега для объяснения, почему это плохая идея).

Вместо этого расширение параметров в массиве bash может создать список без расширений файлов.

filelist=(*);                      # or filelist=(*.log.*) to be more precise
printf '%q\n' "${filelist[@]%.*}"  # or echo "${filelist[@]%.*}"

Затем, чтобы работать с файлами по отдельности..

for i in "${filelist[@]%.*}"; do
   echo "$i";
done

Для конкретной цели OP мы можем использовать bash ассоциативный массив ​​для хранения количества версий.

filelist=(*.log.*)

declare -A count
for i in "${filelist[@]%.*}"; do 
  (( count["$i"]++ )); 
done

for j in "${!count[@]}"; do 
  printf '%q\t%q\n' "$j" "${count[$j]}";
done | sort

report01.log    6
report02.log    6
report03.log    6
report04.log    6
report05.log    6

0
21.06.2017, 00:51
1 ответ

Как заметил ivanivan, интерпретация параметров строки в вашем случае осуществляется программой (useradd). Многим программам не важен порядок параметров, но некоторым он важен.

Напр. convert (из пакета imagemagick) преобразует изображения и указывает:

convert [input-option] input-file [output-option] output-file

Таким образом, параметры ввода должны быть указаны перед входным файлом, и аналогично для параметров вывода.

Существуют гораздо более сложные примеры, такие как компиляторы, которым для корректной работы необходимо, чтобы параметры располагались в определенном порядке.

Во всех случаях рекомендуется обращаться к справочным страницам команды или --help (или -h, или -?, или чему-то еще) программы, которую вы хотите запустить.Что-то может пойти не так...

2
28.01.2020, 02:25

Теги

Похожие вопросы