Ответ 1
Вы можете просто использовать двойные кавычки:
alias mx="find . -name '*.sh' -exec chmod a+x {} \;"
EDIT: Кроме того, одинарные кавычки '
вокруг {}
не нужны.
Хотите создать псевдоним этой команды
find . -name '*.sh' -exec chmod a+x '{}' \;
и я не могу избежать одиночных кавычек при установке псевдоним
alias mx='find . -name '*.sh' -exec chmod a+x '{}' \;'
Любая помощь приветствуется.
Вы можете просто использовать двойные кавычки:
alias mx="find . -name '*.sh' -exec chmod a+x {} \;"
EDIT: Кроме того, одинарные кавычки '
вокруг {}
не нужны.
То, что вы хотите, это функция, а не псевдоним.
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 '{}' \;
}
Другие ответы содержат лучшие решения в этом (и большинстве) случаях, но если вы по какой-то причине действительно хотите избежать '
, вы можете сделать '"'"'
, который фактически завершает строку, добавляет '
, экранированный "
и снова запустите строку.
alias mx='find . -name '"'"'*.sh'"'"' -exec chmod a+x {} \;'
Дополнительная информация на Как избежать одиночных кавычек в одиночных кавычках?
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'