将多个项目附加到fish shell中的路径(相当于:+;=)

将多个项目附加到fish shell中的路径(相当于:+;=),shell,fish,Shell,Fish,例如,让用户通过定义其他ruby路径。以下是: 红宝石+=( /opt/jruby-1.7.0 “$HOME/src/rubinius” ) 有没有一种很好的方法可以在鱼身上实现这一点 所有fish变量都是数组。所以从理论上来说,这很简单 set -x RUBIES $RUBIES /opt/jruby-1.7.0 "$HOME/src/rubinius" 不幸的是,fish在导出变量时不会自动将该数组转换为冒号分隔的字符串。目前,fish仅对PATH和MANPATH执行此操作 您可以这样做:

例如,让用户通过定义其他ruby路径。以下是:

红宝石+=( /opt/jruby-1.7.0 “$HOME/src/rubinius” )


有没有一种很好的方法可以在鱼身上实现这一点

所有fish变量都是数组。所以从理论上来说,这很简单

set -x RUBIES $RUBIES /opt/jruby-1.7.0 "$HOME/src/rubinius"
不幸的是,fish在导出变量时不会自动将该数组转换为冒号分隔的字符串。目前,fish仅对PATH和MANPATH执行此操作

您可以这样做:

set -x RUBIES "$RUBIES:/opt/jruby-1.7.0:$HOME/src/rubinius"
但前提是红宝石已经被确定;否则,您将得到一个带有前导冒号的字符串,该冒号可能对使用var的任何软件都有特殊意义,也可能没有特殊意义。处理该字符串非常简单:

if set -q RUBIES[1]
    set -x RUBIES "$RUBIES:/opt/jruby-1.7.0:$HOME/src/rubinius"
else
    set -x RUBIES "/opt/jruby-1.7.0:$HOME/src/rubinius"
end
同样,如果您使用fish 2.3(即将发布)或git head构建的fish,您可以使用新的“string”内置项拆分和连接冒号上的字符串:

set rubies (string split ':' $RUBIES)
set rubies $rubies /opt/jruby-1.7.0 "$HOME/src/rubinius"
set -x RUBIES (string join ':' $rubies)

这真的很难看,你必须用5行代码来完成一行bash中可以完成的事情,不是吗?