gpt4 book ai didi

bash - zsh 循环遍历多个参数

转载 作者:行者123 更新时间:2023-11-29 09:46:13 25 4
gpt4 key购买 nike

在我的旧 .bashrc 中,我有一个简短的部分如下:

PATH2ADD_SCRIPTBIN="/home/foo/bar/scriptbin"
PATH2ADD_PYTHONSTUFF="/home/foo/bar/pythonprojects"

PATH2ADDLIST="$PATH2ADD_SCRIPTBIN $PATH2ADD_PYTHONSTUFF"

for PATH2ADD in $PATH2ADDLIST; do

if [ -z `echo $PATH | grep "$PATH2ADD"` ]; then

export PATH=$PATH:$PATH2ADD
echo "Added '$PATH2ADD' to the PATH."

fi

done

在 Bash 中,这按预期工作:它附加了我在 $PATH2ADDLIST 中包含的路径,如果它们还没有出现在路径中(我必须在意识到我的路径有多大之后这样做每次我采购我的 .bashrc 时都会收到)。输出(当提供的路径不存在时)如下:

Added '/home/foo/bar/scriptbin' to the PATH.
Added '/home/foo/bar/pythonprojects' to the PATH.

但是,我最近切换到了神奇的 Zsh 领域,现在完全相同的文本行产生了这个结果:

Added '/home/foo/bar/scriptbin /home/foo/bar/pythonprojects' to the PATH.

现在我很确定这是因为 Zsh 进行参数扩展的方式有些不同,或者它与 Zsh 改变 的方式有关code>for 循环,但我不确定如何解决这个问题。

可能有人有一些见解吗?

最佳答案

使用数组来存储这些变量,即

PATH2ADD_SCRIPTBIN="/home/foo/bar/scriptbin"
PATH2ADD_PYTHONSTUFF="/home/foo/bar/pythonprojects"

# Initializing 'PATH2ADDLIST' as an array with the 2 variables
# to make the looping easier

PATH2ADDLIST=("${PATH2ADD_SCRIPTBIN}" "${PATH2ADD_PYTHONSTUFF}")

# Looping through the array contents
for PATH2ADD in "${PATH2ADDLIST[@]}"
do
# Using the exit code of 'grep' directly with a '!' negate
# condition
if ! echo "$PATH" | grep -q "$PATH2ADD"
then
export PATH=$PATH:$PATH2ADD
echo "Added '$PATH2ADD' to the PATH."
fi
done

这样可以使它在 zshbash 中更加兼容。在两个 shell 上进行示例试运行,

# With interpreter set to /bin/zsh

zsh script.sh
Added '/home/foo/bar/scriptbin' to the PATH.
Added '/home/foo/bar/pythonprojects' to the PATH.

并在 bash

bash script.sh 
Added '/home/foo/bar/scriptbin' to the PATH.
Added '/home/foo/bar/pythonprojects' to the PATH.

关于bash - zsh 循环遍历多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42048054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com