Как проверить, является ли аргумент допустимым именем файла в командной оболочке?

StackOverflow https://stackoverflow.com/questions/1449132

  •  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} является обычным файлом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top