代码之家  ›  专栏  ›  技术社区  ›  R71

如何在bash别名定义中使用控制字符[duplicate]

  •  0
  • R71  · 技术社区  · 5 年前

    我在bash中定义别名时遇到了一个问题。

    alias mypr="enscript -jC -p output.ps -b '$n %W Page $% of $='"
    

    但是,当我输入alias mypr时,我得到了这个信息(n美元消失了,一些额外的引号出现了):

    alias mypr='enscript -jC -p output.ps -b '\'' %W Page $% of $='\'''
    

    我试着看看答案 53398792

    0 回复  |  直到 5 年前
        1
  •  1
  •   KamilCuk    5 年前

    $n " 引用。因为很可能是变数 n 是空的,它会膨胀成零。逃避吧。

    alias mypr="enscript -jC -p output.ps -b '\$n %W Page \$% of \$='"
    

    alias mypr='enscript -jC -p output.ps -b '\''$n %W Page $% of $='\'
    

    mypr() { enscript -jC -p output.ps -b '$n %W Page $% of $=' "$@"; }
    
        2
  •  2
  •   Inian    5 年前

    避免使用 alias alias cdw="cd /home/users/foo/bar/workspace" . 因为任何东西都涉及不止一个命令结构或涉及参数、引号 总是喜欢函数而不是别名

    你的替代函数可以简单地写如下。这在任何unixshell上都是100%可移植的,可以添加到启动文件中

    mypr() {
        enscript -jC -p output.ps -b '$n %W Page $% of $='
    }
    

    $ ".." ,在解析别名定义时,它会尝试展开引号内的内容,作为变量展开的一部分。所以任何包含 前缀before已展开,因此shell尝试展开 $n 它看不到值,所以它保留一个空字符串。

    '..' 或者逃过了所有的 $ 标记,以便在定义期间不会解析它们。从 $% $= 不是任何特殊的shell变量或用户定义的变量,它们不会被扩展,而是按字面意思处理。

    美元

    alias mypr="enscript -jC -p output.ps -b '\$n %W Page $% of $='"
    

    你马上就会发现你已经保留了 但失去了最外层的引语 '..'

    alias mypr="enscript -jC -p output.ps -b \'\$n %W Page $% of $=\'"
    

    当调用别名时,您会发现,即使上面的方法也不起作用,因为shell仍然能够成功地扩展 . 因此,引入另一个层次的逃跑和逃跑,这是你需要的。

    alias mypr="enscript -jC -p output.ps -b \'\\\$n %W Page $% of $=\'"
    
        3
  •  0
  •   robert.baboi    5 年前

    试试这个

    alias mypr="enscript -jC -p output.ps -b \'"'\$n %W Page \$% of \$='"\'"
    

    我用这个更简单的案例进行了测试:

    # this outputs '$2'
    alias tt="echo \'"'\$2'"\'"
    

    所以我所做的就是把所有的美元符号都转义了,放在单引号的字符串中,引号也转义了,但把它们放在双引号字符串中

    我们的想法是你可以把序列粘在一起,这样你就可以像 "lala"'blabla'

    推荐文章