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

Sum*_*mit 17 bash

想要创建此命令的别名

find . -name '*.sh' -exec chmod a+x '{}' \;
Run Code Online (Sandbox Code Playgroud)

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

alias mx='find . -name '*.sh' -exec chmod a+x '{}' \;'
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏.

atx*_*atx 16

你可以使用双引号:

alias mx="find . -name '*.sh' -exec chmod a+x {} \;"
Run Code Online (Sandbox Code Playgroud)

编辑:此外,'周围的单引号{}是没有必要的.


cle*_*oux 14

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

function mx {
  find . -name '*.sh' -exec chmod a+x '{}' \;
}
Run Code Online (Sandbox Code Playgroud)

这将具有别名所具有的相同效果,避免任何"创造性解决方案"进行工作,并且如果您需要灵活性则更灵活.在这种情况下,这种灵活性的一个很好的例子是允许用户指定要搜索的目录,如果没有指定目录,则默认为当前目录.

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


Mar*_*ark 12

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

alias mx='find . -name '"'"'*.sh'"'"' -exec chmod a+x {} \;'
Run Code Online (Sandbox Code Playgroud)

有关如何在单引号字符串中转义单引号的更多信息

  • 你不知道你是怎么救我的屁股的.两天我很痛苦.'\'',\ x27等等没什么帮助我的.最后'''''帮助了我.+1为此. (2认同)