Различие между тестом-h и тестом-L

Между чем различие test -L filename и test -h filename в оболочке ksh. Из страницы справочника оба использовались для идентификации символьной ссылки, но я хочу знать точное различие.

Вот описание из страницы справочника.

 -h file                 True if file exists and  is  a  sym-
                         bolic link.
 -L file                 True if file exists and  is  a  sym-
                         bolic link.
11
задан Sachin Chourasiya 4 January 2010 в 05:37
поделиться

4 ответа

[

] Исходный код для []ksh93[], в файле []bltins/test.c[], показывает, что эти два варианта обрабатываются точно так же, за исключением надежды автора на будущее:[

]. [
        case 'L':
        case 'h': /* undocumented, and hopefully will disappear */
            if(*arg==0 || arg[strlen(arg)-1]=='/' || lstat(arg,&statb)<0)
                    return(0);
            return(S_ISLNK(statb.st_mode));
] [

] Из этого я делаю вывод, что они ведут себя точно так же, но что []-h[] является наследственным вариантом и может однажды исчезнуть :-)[

].
18
ответ дан 3 December 2019 в 02:52
поделиться

Похоже, что они оба существуют по наследственным причинам, чтобы быть совместимыми между различными версиями Unix. Вы должны быть в состоянии использовать любую из них, так как они делают одно и то же, но имейте в виду, что если система, на которой вы работаете, не соответствует последним стандартам, то может отсутствовать та или иная.

Обе формы присутствуют в Single Unix Specification version 3/POSIX 2004, без каких-либо оговорок:

-h pathname
True if pathname разрешается в файл, который существует и является символической ссылкой. Ложно, если отчество не может быть разрешено, или если pathname разрешается в файл, который существует, но не является символической ссылкой. Если конечным компонентом pathname является symlink, эта символическая ссылка не отслеживается.
-L pathname
True, если pathname разрешается в файл, который существует и является символической ссылкой. Ложно, если -L не может быть разрешен, или если pathname разрешается в файл, который существует, но не является символической ссылкой. Если конечным компонентом pathname является Симлинк, эта симлинк не отслеживается.

Согласно test(1) man page на Mac OS X и FreeBSD (обратите внимание, что это предупреждение может быть устаревшим; оно впервые появилось в NetBSD в 1996):

     -h file       True if file exists and is a symbolic link.  This operator
                   is retained for compatibility with previous versions of
                   this program. Do not rely on its existence; use -L instead.

И, по-видимому, некоторые версии Solaris test поддерживают только -h, и (еще в 2003 году) некоторое программное обеспечение переключилось на -h из соображений совместимости, так что -h, на самом деле, может быть лучшим вариантом для вас.

9
ответ дан 3 December 2019 в 02:52
поделиться

Разницы нет, они точно такие же. Вероятно, они существуют для объединения различных реализаций test pre-POSIX.

.
2
ответ дан 3 December 2019 в 02:52
поделиться

Man page Fedora's says

   -h FILE
          FILE exists and is a symbolic link (same as -L)
1
ответ дан 3 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

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