зацикливается через массив для для данного разных результатов

Вы бы пошли против большого импульса и истории UNIX, переименовывая скрытые папки в вашем домашнем каталоге, я бы не стал этого делать.
Эти папки не только ожидают существующие программы, но и любые приложения, которые вы устанавливаете в будущем, просто поместят больше скрытых папок в ваш домашний каталог.
Согласен, что это раздражает - у меня почти 100 файлов и папок в моем домашнем каталоге. Вместо этого я рекомендую вам научиться использовать инструменты для управления списками и поиска файлов, например

Вот несколько способов вывести список игнорируемых скрытых файлов:

  • ls
  • find. -not -path '* / \. *' == Объяснение ==> Параметр -path проверяет шаблон на соответствие всей строке пути. * - это подстановочный знак, / - это разделитель каталогов, \. - это точка (ее нужно экранировать, чтобы избежать особого значения), а * - еще один подстановочный знак. -not означает не выбирать файлы, соответствующие этому тесту.

Лично я предпочитаю использовать режим копирования tmux (с привязкой клавиш vi).

0
16.11.2018, 11:02
1 ответ

Ваш цикл использует krnв качестве переменной цикла. Это также имя массива, который вы зацикливаете. Оболочка не поддерживает отдельные пространства имен для переменных массива и переменных массива, отличных от -.

Для каждой итерации krnбудет установлено текущее значение из массива. Это приводит к изменению первого элемента массива на каждой итерации. Цикл модифицирует массив так, что первый элемент будет копией последнего элемента после окончания цикла.

Чтобы исправить это, выберите другое имя для переменной цикла или для массива.


Кроме того, вы должны использовать"${krn[@]}"(расширение, заключенное в двойные кавычки )в заголовке цикла, так как использование ${krn[@]}без кавычек разделит каждый элемент на пробелы (или что-то еще в$IFS)и вызовет подстановку имени файла на получившиеся слова. То же самое касается echo "${krn[i]}"в более позднем цикле.

Предполагая, что в массиве есть хотя бы один элемент, весь цикл можно заменить на

printf '%s\n' "${krn[@]}"
2
28.01.2020, 02:31

Теги

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