我正在尝试使用 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
.
请注意,使用zsh
like with (t)csh
,您也可以这样做${PWD:t:s/trunk/latest/}
。
虽然bash
也支持那些用于历史扩展的 csh 历史修饰符,但它不支持它们的参数扩展。
在这里bash
,使用临时变量:
var=${PWD##*/} var=${var//trunk/latest}
Run Code Online (Sandbox Code Playgroud)