Обнаружьте, если путь пользователя имеет определенный каталог в нем

select cast(score/10 as varchar) + '-' + cast(score/10+9 as varchar), 
       count(*)
from scores
group by score/10
46
задан sbj3 19 June 2015 в 22:09
поделиться

3 ответа

Что-то действительно простое и наивное:

echo "$PATH"|grep -q whatever && echo "found it"

Где то, что вы ищете. Вместо && вы можете поместить $? в переменную или использовать правильный оператор if .

Ограничения включают:

  • Вышеупомянутое будет соответствовать подстрокам больших путей (попробуйте сопоставить на «bin», и он, вероятно, найдет его, несмотря на то, что «bin» отсутствует на вашем пути, / bin и / usr / bin)
  • Вышеупомянутое не будет автоматически расширять ярлыки, такие как ~

Или используйте однострочную строку perl:

perl -e 'exit(!(grep(m{^/usr/bin$},split(":", $ENV{PATH}))) > 0)' && echo "found it"

У нее все еще есть ограничение, заключающееся в том, что она не выполняет никаких расширений оболочки, но не дает сбоя, если подстрока совпадает. (Вышеупомянутое соответствует " / usr / bin ", если это не ясно).

нет на вашем пути, / bin и / usr / bin)
  • Вышеупомянутое не будет автоматически расширять ярлыки, такие как ~
  • или использование однострочника perl:

    perl -e 'exit(!(grep(m{^/usr/bin$},split(":", $ENV{PATH}))) > 0)' && echo "found it"
    

    Это все еще имеет ограничение, которое не выполняет никаких расширений оболочки, но не дает сбоя при совпадении подстроки. (Вышеупомянутое соответствует " / usr / bin ", если это не ясно).

    нет на вашем пути, / bin и / usr / bin)
  • Вышеупомянутое не будет автоматически расширять ярлыки, такие как ~
  • или использование однострочника perl:

    perl -e 'exit(!(grep(m{^/usr/bin$},split(":", $ENV{PATH}))) > 0)' && echo "found it"
    

    Это все еще имеет ограничение, которое не выполняет никаких расширений оболочки, но не дает сбоя при совпадении подстроки. (Вышеупомянутое соответствует " / usr / bin ", если это не ясно).

    5
    ответ дан 26 November 2019 в 20:04
    поделиться

    Использование grep является излишним и может вызвать проблемы, если вы ищете что-либо, содержащее метасимволы RE. Эту проблему можно отлично решить с помощью встроенной команды bash [[]:

    if [[ ":$PATH:" == *":$HOME/bin:"* ]]; then
      echo "Your path is correctly set"
    else
      echo "Your path is missing ~/bin, you might want to add it."
    fi
    

    Обратите внимание, что добавление двоеточий перед расширением $ PATH и путем поиска решает проблему совпадения подстроки; Заключение пути в двойные кавычки позволяет избежать проблем с метасимволами.

    128
    ответ дан 26 November 2019 в 20:04
    поделиться

    Вот как это сделать без grep :

    if [[ $PATH == ?(*:)$HOME/bin?(:*) ]]
    

    Ключ здесь - сделать двоеточия и подстановочные знаки необязательными с помощью конструкции ? () . В этой форме не должно быть никаких проблем с метасимволами, но если вы хотите включить кавычки, они идут туда:

    if [[ "$PATH" == ?(*:)"$HOME/bin"?(:*) ]]
    

    Это еще один способ сделать это с помощью оператора сопоставления ( = ~ ) поэтому синтаксис больше похож на grep :

    if [[ "$PATH" =~ (^|:)"${HOME}/bin"(:|$) ]]
    
    11
    ответ дан 26 November 2019 в 20:04
    поделиться