You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在fish shell中执行参数展开(parameter expansion)?

在Fish Shell中实现类似Bash参数展开的目录跳转功能

首先明确告诉你:Fish Shell确实支持参数展开,只是语法和Bash有些细微差别,而且实现你要的「一键返回上一级目录」功能,用Fish的原生语法比调用Bash脚本要简单得多。

核心解法:用Fish的字符串裁剪实现目录跳转

在Fish里,你可以直接对当前目录变量$PWD进行字符串裁剪来得到上一级目录,逻辑和Bash的参数展开思路一致:

cd "${PWD%/*}"

这里的%/*表示从字符串末尾开始,删除最后一个/及其后面的所有内容,正好能从/path/to/my/dir得到/path/to/my/。

封装成便捷命令:定义Fish函数

别用别名来实现back命令——因为别名只是简单的命令替换,没法直接在当前Shell环境执行cd(你之前用. back.sh没用,是因为Bash脚本的运行环境和Fish完全隔离,cd只作用于Bash子进程,不会影响Fish的当前目录)。

正确的做法是在~/.config/fish/config.fish里定义一个Fish函数:

function back
    cd "${PWD%/*}"
end

保存后重启Fish,或者执行source ~/.config/fish/config.fish让配置生效,之后输入back就能直接跳转到上一级目录了。

进阶:支持跳多级目录

如果需要跳多级(比如直接回到/path/to/),可以给函数加个参数,让它支持自定义跳转层级:

function back
    # 默认跳1级,输入back 2则跳2级
    set levels ${1:-1}
    set target_dir $PWD
    for i in (seq 1 $levels)
        set target_dir "${target_dir%/*}"
    end
    cd "$target_dir"
end

这样输入back 2就能直接跳两级,灵活性拉满。

关于Fish的参数展开细节

Fish的参数展开文档其实包含了这些字符串操作,你可以用help string查看详细用法——它支持的模式匹配语法和Bash类似:

  • %pattern:从字符串末尾删除匹配pattern的最短部分
  • %%pattern:从字符串末尾删除匹配pattern的最长部分
  • #pattern:从字符串开头删除匹配pattern的最短部分
  • ##pattern:从字符串开头删除匹配pattern的最长部分

内容的提问来源于stack exchange,提问作者S. Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:06:38