gpt4 book ai didi

linux - "Can' t shift the many"破折号 case 语句中的错误

转载 作者:行者123 更新时间:2023-12-03 09:57:50 24 4
gpt4 key购买 nike

我在 Dash 中运行 Arch Linux 和脚本。
我有一个虚拟脚本,它输出我使用参数设置的所有变量。我遵循了建议以这种方式获取输入的教程。 Link to article

while [ ! -z "$1" ]; do
case "$1" in
--param|-p)
shift
#code
;;
--other-param|-op)
shift
# code
;;
esac
shift
done
在下面的 MRE 中,输入 -e参数在 shift 上产生错误“移位:不能移位那么多”该参数代码中的行。它是一致的,我不知道这意味着什么。
为什么会抛出这个错误?
我的 MRE 脚本以 dash 作为 shell 运行,如下所示。
#!/bin/dash

while [ ! -z "$1" ]; do
case "$1" in
-e)
shift
echo "Error right about..."
;;
esac
shift
done
./mre.sh -e 的输出
Error right about...
./mre.sh: 32: shift: can't shift that many

最佳答案

问题是 shift之后 esac .您已经处理了 "$@" 中的所有参数。在你的演示中,所以没有什么可以改变的。
您正在遵循的教程试图演示如何使用像 -t 12 这样的参数的选项。将争论留在 $1 中在第一次轮类之后,然后在完成后也将其关闭。 (我不会这样做;当您完成该特定选项时,第二个转变应该发生在 case 内,这样您就不会强制所有选项都需要参数。)
Bash 在这方面的工作方式与 Dash 完全一样,尽管当它不能时它不会给你明确的错误消息 shift没有了。

关于linux - "Can' t shift the many"破折号 case 语句中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63219415/

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