
Итак, я создаю функцию, которая выполняет цикл for по всем файлам в каталоге в качестве заданного аргумента и выводит все файлы и каталоги:
#!/bin/bash
List () {
for item in $1
do
echo "$item"
done
}
List ~/*
Однако при запуске скрипта он выводит только первый файл в каталоге.
Есть идеи?
решение1
Если вы пытаетесь перебрать файлы в каталоге, вам нужно выполнить глобальную подстановку каталога следующим образом:
#!/bin/bash
List () {
for item in "${1}/"*
do
echo "$item"
done
}
Тогда назовите это так:
$ list ~
В качестве альтернативы, если вы хотите передать несколько файлов в качестве аргументов, вы можете написать свой for
цикл следующим образом:
List () {
for item
do
echo "$item"
done
}
Который тогда можно назвать как:
$ list ~/*
Что не так с вашей текущей функцией:
Когда вы вызываете его с glob, он передает каждый файл в каталоге как отдельный аргумент. Допустим, ваш домашний каталог содержит file1
, file2
, и file3
. Когда вы вызываете list ~/*
, вы по сути вызываете:
list ~/file1 ~/file2 ~/file3
Тогда в ваш for
цикл передается только позиционный параметр 1, for item in ~/file1
а остальные позиционные параметры не используются.
Также спасибо Ilkkachu за то, что указал на то, что вы забыли про a /
в своем хэшбэнге, что я совершенно упустил.