Как проверить, является ли arg допустимым именем файла в Shell? - PullRequest
1 голос
/ 19 сентября 2009

Мне нужно проверить, являются ли аргументы действительными именами файлов, это правильный способ сделать это? Кажется, что я допустил какую-то ошибку в строке 2, но я не знаю, где.

for i in ${@}; do                                   
if [ -f ${i}]; then                             
    echo ${i}
else continue
fi
done

Ответы [ 3 ]

2 голосов
/ 19 сентября 2009

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

for i in "${@}"; do 
if [ -f "${i}" ]; then
    echo "${i}"
else continue
fi
done

"else continue" не является необходимым, если только это не заполнитель для чего-то еще, что вы планируете поставить вместо "continue".

1 голос
/ 20 сентября 2009

Вот краткое решение, которое работает, даже если имена файлов содержат пробелы:

for i
do
    test -f "$i" && echo "$i"
done

Обратите внимание, что оператор for принимает аргументы командной строки, нет необходимости вводить больше. Команда test - это короткий путь, если .. затем .. fi

0 голосов
/ 19 сентября 2009

-f проверяет, что $ {i} является обычным файлом.

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