【问题标题】: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】:
单引号内的单引号没有转义序列。你不能像你想象的那样写\'。所以有两种选择。
-
你可以打破单引号,添加一个转义的单引号\',然后返回,像这样:
alias test='lsof -i tcp:80 | awk '\''$1 == "Google" {print $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}' 可以像这样用单引号分割
lsof -i tcp:80 | awk
'
$1=="Google" {print $2}
'
然后用适当的引号引用
'lsof -i tcp:80 | awk'
"'"
'$1=="Google" {print $2}'
"'"
然后将每个部分合并在一起,你就有了你的别名:
'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}'
}