Подтвердить что ты не робот

Как избежать одиночной кавычки при настройке псевдонимов

Хотите создать псевдоним этой команды

find . -name '*.sh' -exec chmod a+x '{}' \;

и я не могу избежать одиночных кавычек при установке псевдоним

alias mx='find . -name '*.sh' -exec chmod a+x '{}' \;'

Любая помощь приветствуется.

4b9b3361

Ответ 1

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

alias mx="find . -name '*.sh' -exec chmod a+x {} \;"

EDIT: Кроме того, одинарные кавычки ' вокруг {} не нужны.

Ответ 2

То, что вы хотите, это функция, а не псевдоним.

function mx {
  find . -name '*.sh' -exec chmod a+x '{}' \;
}

Это будет иметь тот же эффект, который имел бы псевдоним, избегая любых "творческих решений", чтобы сделать работу, и является более гибким, если вам когда-либо понадобится гибкость. Хорошим примером такой гибкости в этом случае является то, что пользователь может указать каталог для поиска и по умолчанию для текущего каталога, если каталог не указан.

function mx {
  if [ -n $1 ]; then
    dir=$1
  else
    dir='.'
  fi
  find $dir -name '*.sh' -exec chmod a+x '{}' \;
}

Ответ 3

Другие ответы содержат лучшие решения в этом (и большинстве) случаях, но если вы по какой-то причине действительно хотите избежать ', вы можете сделать '"'"', который фактически завершает строку, добавляет ', экранированный " и снова запустите строку.

alias mx='find . -name '"'"'*.sh'"'"' -exec chmod a+x {} \;'

Дополнительная информация на Как избежать одиночных кавычек в одиночных кавычках?

Ответ 4

Try

alias mx=$'find . -name \'*.sh\' -exec chmod a+x \'{}\' \\;'

От man bash:

Слова формы $'string' обрабатываются специально. Слово расширяется до строки с заменой символов с обратным слэшем, как указано в стандарте ANSI C. Последующие последовательности обратного слэша, если они присутствуют, декодируются следующим образом:

  \\     backslash
  \'     single quote
  \"     double quote
  \n     new line
  ...

См. пример:

  echo $'aa\'bb'