如何在fish shell中进行参数扩展?

How to perform parameter expansion in fish shell?

我有一个 bash program,它使用参数扩展从我所在的目录返回一级。例如,如果我在目录 /path/to/my/dir 中,我的程序将允许我转到 /path/to/my/,而无需重新键入整个路径或多次使用 cd -。 最近,我决定开始使用鱼 shell 并且我喜欢它。但是我不太确定如何在鱼 shell 中做 parameter expansion。 我试图在 ~/.config/fish/config.fish 中为我的 bash 程序创建一个别名,这样 back 将 运行 bash /path/to/back.sh,但这不会 运行 当前环境下的程序。将其更改为 . /path/to/back.sh 并没有真正的帮助,因为 fish 不知道如何 运行 一个 bash 脚本。

我想知道fish有参数扩展功能吗?我尝试阅读 documentation 但找不到它。

如有任何帮助,我们将不胜感激。

谢谢。

您的 back.sh 脚本不可能工作,除非您通过 .source 运行 连接它。这是因为子进程不能影响任何其他进程的环境,包括 CWD。如果您 运行 back.sh 1 它只会更改该脚本的 CWD,这没有意义,因为脚本会立即退出。

Fish 确实支持参数扩展,但不支持像 ${prev_dir%/*} 这样的大括号结构。 Fish 更喜欢使用命令而不是复杂的语法来进行此类操作。因此,例如,要去除最后一个斜杠后的所有内容,您可以在 fish:

中执行类似的操作
set prev_dir (string split -r -m1 / $prev_dir)[1]

正如其中一位评论者指出的那样,您通常只需 cd .. 即可在目录层次结构中向上移动一个级别。您真正需要多升一级以上的频率是多少?对我来说,答案很少,在这种情况下,我只是 cd ../.. 移动两个级别。