gpt4 book ai didi

shell - 使用 zsh 中内置的源读取脚本中的位置参数

转载 作者:行者123 更新时间:2023-12-04 16:18:00 24 4
gpt4 key购买 nike

在我的 shell 脚本中获取另一个脚本时,我注意到一些奇怪的行为。我正在获取的用于在 shell 脚本中设置环境的脚本采用可选参数,例如

source setup.sh version1

但是,在我的 shell 脚本中,我也有命令行参数变量。例如:

./myscript.sh TEST 1

内部myscript.sh:

#!/bin/zsh
source setup.sh
echo ROOT version setup $ROOT_SYS
...more of the script

我在上面的脚本中注意到的问题是 $1 参数(本例中为 TEST)在 source setup.sh 命令。这会导致命令变为

source setup.sh TEST

这当然会失败,因为setup.sh没有版本TEST

我通过将脚本编辑到下面解决了这个问题。

#!/bin/zsh
source setup.sh version1
echo ROOT version setup $ROOT_SYS
...more of the script

source 命令现在不会获取 $1 参数。

当我运行 shell 脚本时,source 命令为何/如何获取 $1 参数?

最佳答案

历史上,unix shell 不允许将任何参数传递给使用 . 内置函数调用的脚本(source. 在 bash、ksh 和 zsh 中可用)。 . 内置表示“就像该文件实际上包含在此处一样”。

在 bash、ksh 和 zsh 中,如果将额外参数传递给 . 内置函数,它们将成为源脚本中的位置参数($1 等) 。如果传递零个参数,主脚本的位置参数仍然有效。在这些 shell 中, . 的行为很像调用函数,尽管并不完全如此(特别是在 bash 中,如果修改子脚本内的位置参数,则主脚本会看到该修改)。

避免这种困难的一个简单方法是只在下标中定义函数(也许还有变量)。将其视为代码库,这样仅仅获取它是没有效果的,然后从子脚本中调用函数来实际执行某些操作。

关于shell - 使用 zsh 中内置的源读取脚本中的位置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7498368/

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