Я хочу только проверить в bash, существует ли определенный ФАЙЛ.
На этой странице упоминаются два параметра для использования с , если
:
[-a ФАЙЛ]
- Истина, если ФАЙЛ существует [-e ФАЙЛ]
- Истинно, если ФАЙЛ существует Являются ли они эквивалентными или есть ли между ними разница?
-a
опция является тем же самым как -e
, и существует для совместимости с Korn Shell, у которого Bash одолжил много функций.
Из стандарта POSIX, описания test
команда (ссылка):
Раннее предложение использовало основной KornShell-a (с тем же значением), но это было изменено на-e, потому что были опасения по поводу высокой вероятности людей, путающих-a основное устройство с-a бинарным оператором.
примечание стороны: двоичный файл означает флаг, который появляется между двумя переменными [ $var1 -a $var2 ]
, основные средства, появляющиеся в списке аргументов сначала как в [ -a $var ]
На самом деле, Korn Shell (ksh93
здесь) ручные состояния:
- файл
То же как-e ниже. Это является устаревшим.
test
команда, которая используется в статье TLDP, Вы сослались на встроенный удар использования test
, однако опция также присутствует в /usr/bin/test
несмотря на пропавших без вести из документации:
$ /usr/bin/test -a /etc/passwd && echo 1
1
Пока Вы на 100% уверены, что Ваши сценарии будут использоваться или на Bash или на Korn Shell - затем да, это в порядке. Однако, если Вы боретесь за мобильность своих сценариев и хотите записать сценарию Право WayTM, необходимо использовать -e
. Стандартная оболочка Ubuntu, /bin/sh
, который является на самом деле Тире - Debian Amquist, Shell - не распознает что как допустимая опция:
$ dash
$ test -a /etc/passwd
dash: 1: test: -a: unexpected operator
В случаях, где Вы хотите портировать свой сценарий на другие платформы, с помощью -a
как гарантируют, не будет безопасен с /usr/bin/test
также, и необходимо придерживаться с -e
потому что это на самом деле указано стандартом POSIX.