Есть ли существенная разница между `if [-a FILE]` и `if [-e FILE]`

Я хочу только проверить в bash, существует ли определенный ФАЙЛ.
На этой странице упоминаются два параметра для использования с , если :

    {{ 1}}
  • [-a ФАЙЛ] - Истина, если ФАЙЛ существует
  • [-e ФАЙЛ] - Истинно, если ФАЙЛ существует

Являются ли они эквивалентными или есть ли между ними разница?

4
задан 5 September 2017 в 13:48

1 ответ

Что делает-a и почему он существует?

-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.

2
ответ дан 1 December 2019 в 10:16

Другие вопросы по тегам:

Похожие вопросы: