Синтаксис grep для поиска строк в одинарных кавычках?

В основном происходит две вещи: команды set вызываются в подоболочке, чтобы не испортить ваши текущие параметры оболочки, и эта подоболочка устанавливается в режим POSIX перед перечисление всех переменных. Процитируем руководство:

posix Измените поведение bash, где операция по умолчанию отличается от стандарта POSIX чтобы соответствовать стандарту (режим posix).См. ТАКЖЕ ниже для ссылка на документ в котором подробно описывается, как режим posix влияет на поведение bash.

Короче говоря, bash в режиме POSIX будет вести себя ближе к тому, что делает sh.

Что касается set без опций, он также есть в руководстве и фактически указывает причину, почему необходим режим POSIX:

set [+abefhkmnptuvxBCEHPT] [+o имя-опции] [аргумент ...] Без опций, имя и значение каждой переменной оболочки отображаются в формате которые можно повторно использовать в качестве входных данных для установки или сброса текущие установленные переменные. . . В режиме posix отображаются только переменные оболочки.

...в отличие от определений переменных и функций, что делается, когдаbash работает в обычном режиме.

Дополнительную информацию о режиме POSIX см. в этом.

0
27.09.2016, 02:46
4 ответа

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

grep "require('jquery')" file.js

Когда вы это сделаете:

grep 'require('jquery')' file.js

Оболочка сначала разбивает шаблон на 3 части на основе одинарных кавычек. Сначала литерал 'require (' , затем jquery , а затем литерал ')' . Таким образом, фактически используется шаблон как require (jquery) , что не соответствует ничему ожидаемо.

Пример:

$ cat foo.js 
var View = require('ampersand-view');
window.jQuery = require('jquery');
require('bootstrap');
require('bootstrap-tooltip');
var extend = require('lodash/assign');

$ grep "require('jquery')" foo.js
window.jQuery = require('jquery');
1
28.01.2020, 02:19

Одиночные кавычки нельзя вставлять в одинарные кавычки. Попробуйте:

$ grep "require('jquery')" index.js
window.jQuery = require('jquery');

В качестве альтернативы вы можете завершить строку в одинарных кавычках, добавить экранированную одинарную кавычку, а затем перезапустить строку в одинарных кавычках:

$ grep 'require('\''jquery'\'')' index.js
window.jQuery = require('jquery');

Обсуждение

Чтобы лучше понять, что происходит, вы можете использовать echo операторы, чтобы увидеть, как оболочка обрабатывает строки:

$ echo 'require('jquery')'
require(jquery)

В приведенном выше примере есть две строки в одинарных кавычках: require ( и ) . Что касается оболочки, строка jquery не заключена в кавычки.

$ echo "require('jquery')"
require('jquery')

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

Иногда, чтобы избежать расширений оболочки, нужно, чтобы все было в строке в одинарных кавычках. В этом случае:

$ echo 'require('\''jquery'\'')'
require('jquery')

В приведенном выше примере есть три строки в одинарных кавычках: require (, jquery и ) . Между этими строками находятся одинарные кавычки, которые экранируются, чтобы оболочка рассматривала их как обычные символы.


Этот ответ предполагает, что оболочка является оболочкой bash, dash, ash или другой оболочкой, производной от POSIX или bourne. Для получения информации о других снарядах см. ответ Стефана Шазеласа .

2
28.01.2020, 02:19

Поместите шаблон поиска в двойные кавычки.

grep "require('jquery')" index.js
0
28.01.2020, 02:19

В большинстве оболочек символ ' является оператором кавычек, а символ пробела используется для разделения аргументов команды. Таким образом, ваша оболочка проанализирует эту команду как 3 аргумента для передачи команде / bin / grep :

  1. grep
  2. require (jquery)
  3. index.js

In 2 выше, 'require (' jquery ')' был взят как процитированный require ( конкатенированный с некотируемым jquery в сочетании с процитированным ) .

Вы хотите, чтобы 2 было require ('jquery') . Поскольку ', например ( и ) является специальным символом оболочки, вам нужно каким-то образом заключить его в кавычки. Синтаксис зависит от оболочки. В оболочках типа Борна, fish и (t) csh , вы можете использовать двойные кавычки, которые они распознают как другой оператор цитирования:

 grep "require('jquery')"

In rc -подобные оболочки ( rc , akanga , es ), где '...' - единственная форма цитирования, синтаксис :

 grep 'require(''jquery'')'

Этот двойной- ' внутри ' ...« - это rc способ побега a » там.

Подробнее о специальных символах в различных оболочках Unix и о том, как заключить в кавычки / их экранировать , см. Как использовать специальный символ в качестве обычного? .

1
28.01.2020, 02:19

Теги

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