bash / zsh 别名:我可以获取参数并在子shell 中使用吗?

tgm*_*ted 7 bash zsh shell locale alias

我想要一个别名,它以“.”的字典顺序给出目录列表。首先是文件。似乎在不编写我自己的脚本(这不是真正的问题)的情况下完成此操作的一种方法是使用LC_ALL="C". (这是根据排序手册页和多个其他站点)。

但是,将语言环境设置为“C”可能(并且确实)导致某些软件安装中断。所以我的短期解决方案类似于这个(为了简洁,这没有额外的 ls 选项):

alias ls='(LC_ALL="C"; /bin/ls)'

但这不允许参数“传递”到子shell中。

这当然不起作用:

alias ls='(LC_ALL="C"; /bin/ls $*)'

有没有办法用一个简单的别名来处理这个问题?(与编写 shell 脚本/函数相反,我可以这样做)。

mpy*_*mpy 10

您不需要子外壳。您可以通过在命令前面加上不带分号的变量赋值来仅为以下命令更改环境。比较例如输出

LC_ALL=C env | grep LC_ALL
Run Code Online (Sandbox Code Playgroud)

与输出

env | grep LC_ALL
Run Code Online (Sandbox Code Playgroud)

因此,长话短说,以下别名应该适合您:

alias ls='LC_ALL=C /bin/ls'
Run Code Online (Sandbox Code Playgroud)

/bin/ls在你的例子中使用了as,但正如Kamil Maciorowski在对另一个答案的评论中指出的那样,你输入的ls命令也可能是一个别名,所以也许你也应该考虑这个替代方案:

alias ls='LC_ALL=C ls'
Run Code Online (Sandbox Code Playgroud)