有没有办法做多个shell变量扩展/参数替换?

时间:2013-04-28 23:43:37

标签: shell unix

我在脚本中有一行在zsh中有效,但在bash中不起作用:

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

这基本上是basename $PWD | sed -e 's/\./0/g' -e 's/:/1/g'的短/高效版本。

将变量扩展串联起来的语法是什么?

3 个答案:

答案 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}