如何在设置别名时转义单引号

时间:2011-02-05 21:55:32

标签: bash

想要创建此命令的别名

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

我在设置时无法转义单引号 别名

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

感谢任何帮助。

4 个答案:

答案 0 :(得分:15)

您可以使用双引号:

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

编辑:此外,'周围的单引号{}不是必需的。

答案 1 :(得分:14)

你想要的是一个功能,而不是别名。

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 '{}' \;
}

答案 2 :(得分:12)

其他答案在这个(大多数)情况下包含更好的解决方案,但是你可能因为某种原因真的想要逃避',你可以'"'"'实际结束字符串,添加一个{ {1}}被'转义并再次启动字符串。

"

How to escape single-quotes within single-quoted strings?

的更多信息

答案 3 :(得分:1)

尝试

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'