使用参数扩展来修改另一个扩展的输出

yab*_*joe 10 bash

我正在尝试使用 Bash 参数扩展来修改命令替换或其他参数扩展的输出。

以下嵌套扩展在 Zsh 中工作得很好;但在 Bash 中导致“错误替换”错误:

${${PWD##*/}//trunk/latest}
Run Code Online (Sandbox Code Playgroud)

或者

${$(basename $PWD)//trunk/latest}
Run Code Online (Sandbox Code Playgroud)

输出应该是最后一个文件夹$PWD,取而代之的是latest,当我的当前目录是trunk

所以/home/user/trunk应该成为latest

是否有 Bash 等效项允许在不依赖变量或管道的情况下进行链式扩展?还是 Bash 扩展只允许输入是字符串或普通变量?

Sté*_*las 10

不,替换运算符的嵌套是zsh.

请注意,使用zshlike with (t)csh,您也可以这样做${PWD:t:s/trunk/latest/}

虽然bash也支持那些用于历史扩展的 csh 历史修饰符,但它不支持它们的参数扩展。

在这里bash,使用临时变量:

var=${PWD##*/} var=${var//trunk/latest}
Run Code Online (Sandbox Code Playgroud)