Fish Alias 不保存变量调用

Joh*_*ohn 0 shell alias fish

我目前使用下面的命令来检查 csv 文件是否有重复项,并且在 Fish shell 中运行它效果很好。所以现在我想将其保存为别名,但它会从打印中删除变量。

使用的命令。

awk -F ',' '{print $2 $3}' Data.csv | sort -n | uniq -cd | sort -n
Run Code Online (Sandbox Code Playgroud)

返回别名

awk -F ',' '{print }' Data.csv | sort -n | uniq -cd | sort -n
Run Code Online (Sandbox Code Playgroud)

显然,这不会检查文件中的任何列。那么如何才能将变量调用存储在别名函数中呢。

我运行了命令

alias --save data="awk -F ',' '{print $2 $3}' Data.csv | sort -n | uniq -cd | sort -n"
Run Code Online (Sandbox Code Playgroud)

fah*_*aho 5

Fish 与其他 shell 一样,用双引号扩展变量。

alias --save data="awk -F ',' '{print $2 $3}' Data.csv | sort -n | uniq -cd | sort -n"
Run Code Online (Sandbox Code Playgroud)

"awk?这就是双引号。这也是为什么$2$3会像交互式 Fish 会话中的变量一样着色。

所以它运行alias,但在执行之前它会替换$2和的值$3,并且由于它们没有设置,所以最终什么也没有,所以你得到print

您需要的是转义$变量扩展,或者使用单引号,在这种情况下,您需要转义'awk 调用的引号。

所以要么

alias --save data='awk -F \',\' \'{print $2 $3}\' Data.csv | sort -n | uniq -cd | sort -n'
Run Code Online (Sandbox Code Playgroud)

或者

alias --save data="awk -F ',' '{print \$2 \$3}' Data.csv | sort -n | uniq -cd | sort -n"
Run Code Online (Sandbox Code Playgroud)

老实说,帮自己一个忙,让它成为一个正常的功能:

function data
    awk -F ',' '{print $2 $3}' Data.csv | sort -n | uniq -cd | sort -n
end
Run Code Online (Sandbox Code Playgroud)

然后运行funcsave data。这不仅简化了引用,还允许您将其放在$argv任何您想要的位置,因此您可以将其替换Data.csv$argv并将其运行为data Data.csvdata Data-2.csv或其他。