【问题标题】:Alias if script matches variable, quotation issues脚本匹配变量时的别名,引用问题
【发布时间】:2013-10-01 22:28:30
【问题描述】:

我正在尝试为取消进程的常用命令编写alias,但我遇到了单引号和双引号问题。这是我第一次尝试 Bash 脚本,我有点难过。

lsof -i tcp:80 | awk '$1 == "Google" {print $2}'

这作为一个独立的命令工作并输出正确的 PID。

当我尝试将其格式化为别名时,虽然我遇到了问题。我知道命令在第一个单引号处停止,因为这是结构,但我不知道如何修复它。

alias test='lsof -i tcp:80 | awk '$1=="Google" {print $2}''

【问题讨论】:

    标签: quotes double-quotes bash


    【解决方案1】:

    单引号内的单引号没有转义序列。你不能像你想象的那样写\'。所以有两种选择。

    1. 你可以打破单引号,添加一个转义的单引号\',然后返回,像这样:

      alias test='lsof -i tcp:80 | awk '\''$1 == "Google" {print $2}'\'
      
    2. 您可以使用双引号。然后,您不仅要转义字符串中的双引号,还要转义美元符号。

      alias test="lsof -i tcp:80 | awk '\$1 == \"Google\" {print \$2}'"
      

    【讨论】:

      【解决方案2】:

      尝试像这样定义你的别名

      alias test='lsof -i tcp:80 | awk '"'"'$1=="Google" {print $2}'"'"
      

      单引号' 必须在双引号" 之间进行转义。为此,必须将命令拆分为几个部分以不同方式转义它们。 lsof -i tcp:80 | awk '$1=="Google" {print $2}' 可以像这样用单引号分割

      1. lsof -i tcp:80 | awk
      2. '
      3. $1=="Google" {print $2}
      4. '

      然后用适当的引号引用

      1. 'lsof -i tcp:80 | awk'
      2. "'"
      3. '$1=="Google" {print $2}'
      4. "'"

      然后将每个部分合并在一起,你就有了你的别名:

      'lsof -i tcp:80 | awk'"'"'$1=="Google" {print $2}'"'"
      

      请注意,第一部分不包含任何解释变量,因此它可以用双引号引起来并与第二部分合并。这样别名就变成了

      alias test="lsof -i tcp:80 | awk'"'$1=="Google" {print $2}'"'"
      

      【讨论】:

      • 感谢这也有效,给约翰支票,因为他的可读性更强。
      【解决方案3】:

      在几乎所有发现自己试图定义别名的情况下,改为定义一个函数。

      testing () {
          lsof -i tcp:80 | awk '$1=="Google" {print $2}'
      }
      

      【讨论】:

        猜你喜欢
        • 2019-01-26
        • 1970-01-01
        • 2022-01-21
        • 2011-06-04
        • 1970-01-01
        • 2023-02-07
        • 2021-09-20
        • 2014-03-18
        相关资源
        最近更新 更多