0

我的脚本中有一行可以在 zsh 中使用,但在 bash 中不起作用:

SHORTDIR=${${${PWD##*/}//./_dot_}//:/_colon_}

这基本上是basename $PWD | sed -e 's/\./0/g' -e 's/:/1/g'.

将变量扩展串在一起的语法是什么?

4

3 回答 3

1

我希望有比这更好的方法

SHORTDIR=${PWD##*/}
SHORTDIR=${SHORTDIR//./_dot_}
SHORTDIR=${SHORTDIR//:/_colon_}

但这就是我坚持的。

根据@perreal链接的问题的答案,bash基本上不允许扩展变量本身作为“参数”,这就是它失败的原因。

于 2013-04-28T23:52:53.687 回答
1

遗憾的是,替换的第一部分必须是参数名称。另一种 sed 版本是:

echo $PWD | sed -e 's!.*/!!' -e 'y/.:/01/'
于 2013-04-29T00:06:23.223 回答
0

只是把它扔在那里,很多人不知道可以在一行中完成多个任务。例如:

$ a=1234 a=${a:0:3} a=${a/1}

或者

SHORTDIR=${PWD##*/} SHORTDIR=${SHORTDIR//./_dot_} SHORTDIR=${SHORTDIR//:/_colon_}
于 2019-08-17T23:17:21.083 回答