Как проверить, является ли аргумент допустимым именем файла в командной оболочке?
-
11-09-2019 - |
Вопрос
Мне нужно проверить, являются ли аргументы допустимыми именами файлов, правильно ли это сделать?Похоже, я допустил какую-то ошибку в строке 2, но я не знаю, где.
for i in ${@}; do
if [ -f ${i}]; then
echo ${i}
else continue
fi
done
Решение
Прежде всего, вам нужен пробел перед закрывающей квадратной скобкой.И вы должны заключать свои переменные в кавычки на случай, если в имени файла есть пробел.
for i in "${@}"; do
if [ -f "${i}" ]; then
echo "${i}"
else continue
fi
done
Тот самый "else continue
" в этом нет необходимости, если только это не заполнитель для чего-то другого, что вы планируете заменить "continue
".
Другие советы
Вот краткое решение, которое работает, даже если имена файлов содержат пробелы:
for i
do
test -f "$i" && echo "$i"
done
Обратите внимание, что оператор for принимает аргументы командной строки, больше вводить не нужно.Команда test - это короткий способ if ..тогда ..фи
-f проверяет, что ${i} является обычным файлом.