shell Fish别名不保存变量调用

a5g8bdjr  于 2023-03-09  发布在  Shell
关注(0)|答案(1)|浏览(108)

我现在使用下面的命令来检查一个csv文件的重复项,在Fish shell中运行它就可以了。所以现在我想把它保存为一个别名,但是它会从print中去掉变量。
使用命令。

awk -F ',' '{print $2 $3}' Data.csv | sort -n | uniq -cd | sort -n

返回别名

awk -F ',' '{print }' Data.csv | sort -n | uniq -cd | sort -n

显然,这不会检查文件中的任何列。那么变量调用如何存储在别名函数中呢?
我下了命令

alias --save data="awk -F ',' '{print $2 $3}' Data.csv | sort -n | uniq -cd | sort -n"
5n0oy7gb

5n0oy7gb1#

和其他shell一样,Fish用双引号展开变量。

alias --save data="awk -F ',' '{print $2 $3}' Data.csv | sort -n | uniq -cd | sort -n"

那是"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'

alias --save data="awk -F ',' '{print \$2 \$3}' Data.csv | sort -n | uniq -cd | sort -n"

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

function data
    awk -F ',' '{print $2 $3}' Data.csv | sort -n | uniq -cd | sort -n
end

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

相关问题