【问题标题】:Double quotation mark escaping in alias双引号在别名中转义
【发布时间】:2019-06-15 17:25:35
【问题描述】:

我正在尝试在 Debian Stretch 中设置以下别名

alias myalias='watch -d -n 0.1 '\''find /path -type f -printf '%TY-%Tm-%Td\n' | sort | uniq -c'\'''

我试图用 '\'' 转义第一组引号,但它不适用于周围较深的标记

%TY-%Tm-%Td\n

当我运行命令时,我最终得到以下输出。 %TY-%Tm-%Td\n 周围的引号不再存在,输出不解释 \n 并且结果在一行上。

Every 0.1s: find /root/bolero/bolero/pkl/stocks -type f -printf %TY-%Tm-%Td\n | sort | uniq -c

有什么想法可以完成这项工作吗?

【问题讨论】:

  • 你试过转义所有的内部单引号吗?
  • 是的,它不起作用。当我这样做时,手表和查找工作,但我无法让 \n 工作并且显示坏了。
  • 尝试将\n 更改为\\n(或者甚至更多的反斜杠)。逃跑很难。

标签: linux debian escaping alias


【解决方案1】:

你正在寻找的输出是这样的:

alias myalias='watch -d -n 0.1 '\''find /path -type f -printf '\''\'\'''\''%TY-%Tm-%Td\n'\''\'\'''\'' | sort | uniq -c'\'''

当然,这非常复杂。

因为没人想数引号,所以让我向您介绍一个您可能不知道的 Git 功能:git rev-parse --sq-quote。如果您想知道如何正确地单引号文本,请改为双引号该部分并将其传递给git rev-parse --sq-quote。所以逐渐地,它看起来像这样:

$ git rev-parse --sq-quote "find /path -type f -printf '%TY-%Tm-%Td\n' | sort | uniq -c"
 'find /path -type f -printf '\''%TY-%Tm-%Td\n'\'' | sort | uniq -c'
$ git rev-parse --sq-quote "watch -d -n 0.1 'find /path -type f -printf '\''%TY-%Tm-%Td\n'\'' | sort | uniq -c'"
 'watch -d -n 0.1 '\''find /path -type f -printf '\''\'\'''\''%TY-%Tm-%Td\n'\''\'\'''\'' | sort | uniq -c'\'''

这就是您获得结果的方式。请注意,Git 会在该行插入一个前导空格,您可能需要将其删除以保持整洁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-17
    • 2020-11-26
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2017-09-13
    相关资源
    最近更新 更多