我不知道它是否可以在zsh中工作,但是可以在bash中工作:
PATH=$(paste -d ":" -s << EOF
$PATH
/my/path/1
/my/path/2
/my/path/3
EOF
)
编辑甚至更短:
PATH=`paste -d ":" -s << EOF
$PATH
/my/path/1
/my/path/2
/my/path/3
EOF`
并且没有产生进程:
new_path=(
"$PATH"
/my/path/1
/my/path/2
/my/path/3)
OLD_IFS="$IFS"
export IFS=":"
PATH="${new_path[*]}"
export IFS="$OLD_IFS"
双引号是重要的以防万一$PATH
,$IFS
,${new_path[*]}
并$OLD_IFS
保持在IFS的变量,并避免外壳的解释空间。
Update2带有注释和使用sed的空行管理:
PATH=`sed -e '/^#/'d -e '/^$/'d << EOF | paste -d ":" -s
$PATH
/my/path/1
# This is a comment.
/my/path/2
/my/path/3
EOF`
注释字符必须是该行的第一个字符,并且空行应完全为空。要在注释和空白行之前管理空格和制表符,请sed -e '/^[ \t]*#/'d -e '/^[ \t]*$/'d
改用(要测试的制表符,因为它可能特定于sed实现)。