【问题标题】:How to perform parameter expansion in fish shell?如何在鱼壳中进行参数扩展?
【发布时间】:2019-06-08 23:54:55
【问题描述】:

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

我想知道fish中是否有参数扩展功能?我尝试阅读documentation 并找不到它。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 只需使用cd ..
  • 嗯,我想对于像我这样的程序来说,这很好......但我也只是想知道 fish 是否有参数扩展?
  • 我根本不懂鱼,但paragraph about parameter expansion 看起来很有前途。
  • 该死的。我怎么没发现?感谢您的帮助。
  • 请注意number 1 tenet of fish design:“可以用其他shell 语言完成的所有事情都应该可以在fish 中完成,尽管fish 在这样做时可能依赖于外部命令。” -- 在这种情况下使用dirname 是合适的。

标签: bash shell fish


【解决方案1】:

你的 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 ../.. 来移动两个级别。

【讨论】:

  • 我实际上升了很多级,这就是我使用参数扩展而不是'cd ..'的原因。感谢您的回答。
猜你喜欢
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-20
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多