Как мне найти службу, чье имя было изменено; нет псевдонима

В любой POSIX-совместимой оболочке вы можете сделать:

case $line in (*"$PWD"*)
#    whatever your then block had
;;esac

Это работает в bash, dash, и практически в любой другой оболочке, которую вы можете назвать.

Его также можно использовать для простой обработки нескольких возможностей. Например:

case $line in 
(*"$PWD"*)
    echo \$PWD match\!
;;
(*"$OLDPWD"*)
    echo \$OLDPWD match\!
;;
(*)
    ! echo no match\!
;;esac

Вы также можете использовать чередование:

case $line in (*"$PWD"*|*"$OLDPWD"*)
    echo '$OLDPWD|$PWD match!'
;;esac

Обратите внимание на использование кавычек выше:

  1. case $line ...
    • Объект оператора case не будет разделен ни на $IFS, ни использован в качестве шаблона для gen имен файлов. Это аналогично тому, как обрабатывается левый аргумент в тесте [[.
  2. (*"$PWD "*)
    • Здесь также расширение shell не подвергается ни $IFS, ни генерации имен файлов - расширение без кавычек не будет ни разбивать, ни глобализировать.
    • Однако здесь расширение без кавычек может быть истолковано как шаблон, а не как буквальная строка, и поэтому расширение может означать несколько вещей в зависимости от того, заключено оно в кавычки или нет.
    • Важно заключать в кавычки любую переменную, используемую в шаблоне, которая должна быть интерпретирована буквально, точно так же, как вы бы заключили в кавычки символы шаблона, которые вы хотите интерпретировать буквально.
    • Например, если $PWD содержит * и не заключена в кавычки, то она будет истолкована как объект шаблона, а не как буквальное * для поиска.
0
20.12.2017, 03:27
0 ответов

Теги

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