作为一个天真的菜鸟,我创建了几个用于接受参数的bash别名,它们完全按照预期工作.然而,我试图制作更多这样的别名,但这些不会按预期工作.
这个问题导致我在这里,我了解到bash别名不接受参数.相反,您必须创建一个函数.例如,请看这里或这里.
因此,假设"bash别名不接受论证"共识是正确的,为什么所有这些都有效?
alias pacss='pacman -Ss '
alias pacs='sudo pacman -S '
alias yausnc='yaourt -S --noconfirm '
Run Code Online (Sandbox Code Playgroud)
当我说这些"工作"时,我的意思是,例如,输入'pacs package'会提示我输入密码,提示确认,然后检索和安装包.
那么,为什么这些别名有效呢?他们接受的术语在技术上不是"论据"吗?这是Arch(或Manjaro,我正在使用)的特质吗?时空连续体中的一个洞?
任何澄清应予以赞赏.
编辑:谢谢你的答案解释这些不是要求争论.我不太明白我的第一个例子与以下尝试的别名有何不同,后者不起作用:
alias lping='ping 192.168.1.'
Run Code Online (Sandbox Code Playgroud)
这会失败,因为ping执行时没有附加数字I类型.我的意图是能够输入例如lping 123并让bash执行"ping 192.168.1.123",而是说"未知主机192.168.1".
不,他们"接受"的术语不称为"论据".
Bash别名只是文本替换.
也就是说,当你写作
pacs
Run Code Online (Sandbox Code Playgroud)
bash取代了
sudo pacman -S
Run Code Online (Sandbox Code Playgroud)
当你写作
pacs package
Run Code Online (Sandbox Code Playgroud)
bash取代了
sudo pacman -S package
Run Code Online (Sandbox Code Playgroud)
换句话说,参数不会传递给别名 - 别名之后的字符只会附加到别名扩展到的任何位置.