gpt4 book ai didi

bash - Shell 脚本不读取 MacOS 上的 getopts 参数

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

我编写了一个脚本,它根据命令行上使用的开关执行任务。这是我的脚本:需要 git 分支名称和两个可选开关

-r 用于重置数据库

-t 用于合并训练数据

测试.sh

merge_training=false
reset_database=false

while getopts ":tr" opt; do
case ${opt} in
t ) # process option t
echo "one"
$merge_training=true
;;
r ) # process option r
echo "two"
$reset_database=true
;;
esac
done

echo $reset_database
echo $merge_training

当我用命令运行这个脚本时:

sh test.sh branchname -r -t

它不打印onetwo 并且最后的语句打印:

false
false

这里有什么问题吗?

最佳答案

问题出在你的作业上。您应该收到 2 条错误消息:

false=true: command not found

提示:永远不要把 $ 放在赋值的左边:

惯例是将选项放在前面,然后是额外的参数,所以你的命令行应该是:

bash test.sh -r -t branchname

使用 bash 而不是 shsh 是一个 POSIX shell,大致是 bash 的一个子集(它很复杂)。不要混淆两者。

merge_training=false
reset_database=false

while getopts ":tr" opt; do
case ${opt} in
t ) # process option t
echo "one"
merge_training=true # <<<<<<<<<<<<<<<
;;
r ) # process option r
echo "two"
reset_database=true # <<<<<<<<<<<<<<<
;;
esac
done

shift $(( OPTIND-1 ))
extra="$1"

echo $reset_database
echo $merge_training
echo $extra

关于bash - Shell 脚本不读取 MacOS 上的 getopts 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49648773/

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