我在脚本中有一行在zsh中有效,但在bash中不起作用:
SHORTDIR=${${${PWD##*/}//./_dot_}//:/_colon_}
这基本上是basename $PWD | sed -e 's/\./0/g' -e 's/:/1/g'
的短/高效版本。
将变量扩展串联起来的语法是什么?
答案 0 :(得分:1)
我希望有比
更好的方法SHORTDIR=${PWD##*/}
SHORTDIR=${SHORTDIR//./_dot_}
SHORTDIR=${SHORTDIR//:/_colon_}
但这是我坚持的。
根据@perreal关联的问题的答案,bash基本上不允许扩展变量本身作为“参数”,这就是它失败的原因。
答案 1 :(得分:1)
可悲的是,替换的第一部分必须是参数名称。另一种sed版本是:
echo $PWD | sed -e 's!.*/!!' -e 'y/.:/01/'
答案 2 :(得分:0)
仅仅把它扔在那里,很多人不知道可以在一行中完成多个任务。例如:
class TreeNode {
public:
int value;
TreeNode *children[];
TreeNode(int x, TreeNode kids[]);
virtual ~TreeNode();
};
或
$ a=1234 a=${a:0:3} a=${a/1}