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

Да, есть также альпийские.

sudo apt-get install alpine

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

3 ответа

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

Параметр -a - это то же, что и -e, и существует для совместимости с Korn Shell, из которого Bash заимствовал множество функций ,

Из стандарта POSIX описание команды test (ссылка):

Раннее предложение использовало KornShell -a primary (с тем же значением), но это было изменено на - потому что были опасения относительно высокой вероятности того, что люди путают первичный с -а бинарным оператором.

сторона: флаг двоичных обозначений, который появляется между двумя переменными [ $var1 -a $var2 ], первичные средства появляются в списке аргументов сначала, как в [ -a $var ]

. Фактически, Korn Shell ([ f8] здесь). Ручные состояния:

Раннее предложение использовало KornShell -a primary (с тем же значением), но это было изменено на -e, потому что были опасения относительно высокой вероятности людей путающий -а первичный с -а бинарным оператором.

То же, что и -е ниже. Это устарело.

-a file

$ /usr/bin/test -a /etc/passwd  && echo 1                                   
1

Если функциональность осталась прежней, полезно ли ее использовать?

Команда test, которая используется в ссылка использует встроенный bash test, однако опция также присутствует в /usr/bin/test, несмотря на отсутствие в документации:

$ dash
$ test -a /etc/passwd
dash: 1: test: -a: unexpected operator

Пока вы на 100% убедитесь, что ваши скрипты будут использоваться на Bash или Korn Shell - тогда да, все в порядке. Однако, если вы стремитесь к переносимости своих сценариев и хотите написать скрипт Right WayTM, вы должны использовать -e. Стандартная оболочка Ubuntu, /bin/sh, которая на самом деле является Dash - Debian Amquist Shell, не признает это действительной опцией:

2
ответ дан 22 May 2018 в 18:46
  • 1
    Спасибо, что поделились этим опытом. Хотя мой вопрос на самом деле уже был решен @Tannetto, я принял ваш ответ как решение, так как он объясняет хорошо понятным образом, почему лучше использовать -e;) – derHugo 28 October 2017 в 19:50

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

Параметр -a - это то же, что и -e, и существует для совместимости с Korn Shell, из которого Bash заимствовал множество функций ,

Из стандарта POSIX описание команды test (ссылка):

Раннее предложение использовало KornShell -a primary (с тем же значением), но это было изменено на - потому что были опасения относительно высокой вероятности того, что люди путают первичный с -а бинарным оператором.

сторона: флаг двоичных обозначений, который появляется между двумя переменными [ $var1 -a $var2 ], первичные средства появляются в списке аргументов сначала, как в [ -a $var ]

. Фактически, Korn Shell (ksh93 здесь). Ручные состояния:

Раннее предложение использовало KornShell -a primary (с тем же значением), но это было изменено на -e, потому что были опасения относительно высокой вероятности людей путающий -а первичный с -а бинарным оператором.

То же, что и -е ниже. Это устарело.

-a file

$ /usr/bin/test -a /etc/passwd && echo 1 1

Если функциональность осталась прежней, полезно ли ее использовать?

Команда test, которая используется в ссылка использует встроенный bash test, однако опция также присутствует в /usr/bin/test, несмотря на отсутствие в документации:

$ dash $ test -a /etc/passwd dash: 1: test: -a: unexpected operator

Пока вы на 100% убедитесь, что ваши скрипты будут использоваться на Bash или Korn Shell - тогда да, все в порядке. Однако, если вы стремитесь к переносимости своих сценариев и хотите написать скрипт Right WayTM, вы должны использовать -e. Стандартная оболочка Ubuntu, /bin/sh, которая на самом деле является Dash - Debian Amquist Shell, не признает это действительной опцией:

2
ответ дан 18 July 2018 в 07:23

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

Параметр -a - это то же, что и -e, и существует для совместимости с Korn Shell, из которого Bash заимствовал множество функций ,

Из стандарта POSIX описание команды test (ссылка):

Раннее предложение использовало KornShell -a primary (с тем же значением), но это было изменено на - потому что были опасения относительно высокой вероятности того, что люди путают первичный с -а бинарным оператором.

сторона: флаг двоичных обозначений, который появляется между двумя переменными [ $var1 -a $var2 ], первичные средства появляются в списке аргументов сначала, как в [ -a $var ]

. Фактически, Korn Shell (ksh93 здесь). Ручные состояния:

Раннее предложение использовало KornShell -a primary (с тем же значением), но это было изменено на -e, потому что были опасения относительно высокой вероятности людей путающий -а первичный с -а бинарным оператором.

То же, что и -е ниже. Это устарело.

-a file

$ /usr/bin/test -a /etc/passwd && echo 1 1

Если функциональность осталась прежней, полезно ли ее использовать?

Команда test, которая используется в ссылка использует встроенный bash test, однако опция также присутствует в /usr/bin/test, несмотря на отсутствие в документации:

$ dash $ test -a /etc/passwd dash: 1: test: -a: unexpected operator

Пока вы на 100% убедитесь, что ваши скрипты будут использоваться на Bash или Korn Shell - тогда да, все в порядке. Однако, если вы стремитесь к переносимости своих сценариев и хотите написать скрипт Right WayTM, вы должны использовать -e. Стандартная оболочка Ubuntu, /bin/sh, которая на самом деле является Dash - Debian Amquist Shell, не признает это действительной опцией:

2
ответ дан 24 July 2018 в 18:47

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

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