我的脚本中有一行可以在 zsh 中使用,但在 bash 中不起作用:
SHORTDIR=${${${PWD##*/}//./_dot_}//:/_colon_}
这基本上是basename $PWD | sed -e 's/\./0/g' -e 's/:/1/g'
.
将变量扩展串在一起的语法是什么?
我希望有比这更好的方法
SHORTDIR=${PWD##*/}
SHORTDIR=${SHORTDIR//./_dot_}
SHORTDIR=${SHORTDIR//:/_colon_}
但这就是我坚持的。
根据@perreal链接的问题的答案,bash基本上不允许扩展变量本身作为“参数”,这就是它失败的原因。
遗憾的是,替换的第一部分必须是参数名称。另一种 sed 版本是:
echo $PWD | sed -e 's!.*/!!' -e 'y/.:/01/'
只是把它扔在那里,很多人不知道可以在一行中完成多个任务。例如:
$ a=1234 a=${a:0:3} a=${a/1}
或者
SHORTDIR=${PWD##*/} SHORTDIR=${SHORTDIR//./_dot_} SHORTDIR=${SHORTDIR//:/_colon_}