从函数内部更改全局“路径”?
Changing the global “path” from within a function?
我的 zshenv
文件有一堆行
if [[ -d "$HOME/bin" ]]; then
path=($HOME/bin $path)
fi
我想我会试着把这个模式分解成一个函数。我将其替换为
function prepend_to_path_if_exists() {
if [[ -d ]]; then
path=( $path)
fi
}
prepend_to_path_if_exists("$HOME/bin")
但这给出了错误
/Users/bdesham/.zshenv:8: missing end of string
第 8 行是我调用的行 prepend_to_path_if_exists
。到底是什么导致了这个错误,我怎样才能让这个功能起作用?我在 OS X 10.10.1.
上使用 zsh 5.0.5
您可以像这样像通常的命令执行一样调用函数(没有 ()
):
prepend_to_path_if_exists "$HOME/bin"
zsh 似乎试图扩展 glob prepend_to_path_if_exists(…)
而不是调用函数。
TL;DR:将元素添加到 $path
将通过一些神秘的方式完成:
(虽然我不太确定下面的表格是否适合任何人。)
# `typeset -U` uniqify the elements of array.
# It could be good for $path.
typeset -U path
# prepending some paths unconditionally,
path[1,0]=(\
$HOME/bin \
$HOME/sbin \
)
# then filtering out unnecessary entries afterward.
path=(${^path}(-/N))
$path[x,0]=…
将元素添加(拼接)到从下面获取的数组中:
So that's the same as VAR[1,0]=(...) ? It doesn't really "look" very
much like prepend to me.
-- Greg Klanderman (http://www.zsh.org/mla/workers/2013/msg00031.html)
${^path}(-/N)
在每个 $path
元素上扩展了 glob qualifires -/N
。
(如果 parameter expansion 中没有 ^
,将计算数组的最后一个元素,因此在这种情况下它是强制性的。)
glob qualifires -/N
表示 "symbolic links and the files they point to"(-
) "directory"(/
)。当它不匹配任何东西时不会引发错误 (N
).
简而言之,它将仅保留 $path
.
的现有目录
我的 zshenv
文件有一堆行
if [[ -d "$HOME/bin" ]]; then
path=($HOME/bin $path)
fi
我想我会试着把这个模式分解成一个函数。我将其替换为
function prepend_to_path_if_exists() {
if [[ -d ]]; then
path=( $path)
fi
}
prepend_to_path_if_exists("$HOME/bin")
但这给出了错误
/Users/bdesham/.zshenv:8: missing end of string
第 8 行是我调用的行 prepend_to_path_if_exists
。到底是什么导致了这个错误,我怎样才能让这个功能起作用?我在 OS X 10.10.1.
您可以像这样像通常的命令执行一样调用函数(没有 ()
):
prepend_to_path_if_exists "$HOME/bin"
zsh 似乎试图扩展 glob prepend_to_path_if_exists(…)
而不是调用函数。
TL;DR:将元素添加到 $path
将通过一些神秘的方式完成:
(虽然我不太确定下面的表格是否适合任何人。)
# `typeset -U` uniqify the elements of array.
# It could be good for $path.
typeset -U path
# prepending some paths unconditionally,
path[1,0]=(\
$HOME/bin \
$HOME/sbin \
)
# then filtering out unnecessary entries afterward.
path=(${^path}(-/N))
$path[x,0]=…
将元素添加(拼接)到从下面获取的数组中:
So that's the same as VAR[1,0]=(...) ? It doesn't really "look" very much like prepend to me.
-- Greg Klanderman (http://www.zsh.org/mla/workers/2013/msg00031.html)
${^path}(-/N)
在每个 $path
元素上扩展了 glob qualifires -/N
。
(如果 parameter expansion 中没有 ^
,将计算数组的最后一个元素,因此在这种情况下它是强制性的。)
glob qualifires -/N
表示 "symbolic links and the files they point to"(-
) "directory"(/
)。当它不匹配任何东西时不会引发错误 (N
).
简而言之,它将仅保留 $path
.