为什么这个单行函数在zsh中工作但不是bash,我怎样才能为bash修复它?

时间:2014-12-11 23:16:09

标签: linux bash zsh

当我正在研究如何表达这个问题时,我想出了答案,但它可能对某些人有用。我使用zsh,我的.zshrc和我的.bashrc都有source $HOME/.alias。这是旧的,有问题的~/.alias

rl() { grep -v "$1" "$2" > /tmp/rl.txt && mv /tmp/rl.txt "$2" }
...

它在zsh中工作正常,但是在bash中我遇到意外的文件错误结束,rl未定义。

2 个答案:

答案 0 :(得分:2)

在zsh和bash中都有效的固定~/.alias

rl() { grep -v "$1" "$2" > /tmp/rl.txt && mv /tmp/rl.txt "$2"; }
...

Bash在单行函数声明中的最后一个命令之后只需要一个分号。

答案 1 :(得分:2)

您可以在函数中使用sed,以避免复制文件,然后将其移动到原始文件上。

rl() { sed -i -e "/$1/d" "$2"; }

-i标记就地编辑文件文件,如果提供扩展名,则进行备份。没有扩展,它只是就地编辑。