Ветвление / не Может выделить память

Вы можете использовать встроенную функцию printf .

mo1 () {
  for file in *.txt; do
    grep -n -C1 "$(printf "%s.*" "$@")" "$file"
  done
}

Эта простая версия вставляет . * после последнего элемента. Это не имеет значения для этого конкретного варианта использования, но в других случаях (например, grep -o ) вам может потребоваться удалить лишний . * в конце.

mo1 () {
  pattern=$(printf "%s.*" "$@")
  pattern=${pattern%??}
  for file in *.txt; do
    grep -n -C1 "$pattern" "$file"
  done
}

В bash вы можете поместить вывод printf непосредственно в переменную, что немного быстрее, чем при использовании подстановки команд (но это вряд ли когда-либо будет иметь значение, даже в Cygwin, где подоболочки работают медленно).

mo1 () {
  printf -v pattern "%s.*" "$@"
  pattern=${pattern%??}
  for file in *.txt; do
    grep -n -C1 "$pattern" "$file"
  done
}

Если вы хотите вставить один символ между позиционными параметрами, вы можете установить IFS для этого символа и использовать «$ @» . Но это не сработает, если разделитель состоит более чем из одного символа. В ksh и bash, если есть символ, которого нет в шаблоне, вы можете использовать его для присоединения, а затем выполнить замену. Например, здесь было бы бессмысленно, чтобы шаблоны содержали символы новой строки, поэтому:

mo1 () {
  typeset IFS=$'\n'
  typeset pattern="$*"
  pattern=${pattern//$'\n'/.*}
  for file in *.txt; do
    grep -n -C1 "$pattern" "$file"
  done
}

В zsh, конечно, есть прямой способ.

mo1 () {
  for file in *.txt; do
    grep -n -C1 ${(j:.*:)@} $file
  done
}
1
05.01.2015, 22:42
1 ответ

Я считаю, что этот вопрос будет связана с запросом на монт Windows, ущерб. Когда процесс разветвленного Unix получает сообщение обратно из Windows, появляется шарика.

Это домино в другие сферы, где ресурс «A» запрашивается напрямую или косвенно. Я видел это совсем недавно относительно событий, связанных с VM.

1
27.01.2020, 23:51

Теги

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