![我们可以通过Bash命令行执行来读取变量名作为参数值吗?](https://linux22.com/image/183774/%E6%88%91%E4%BB%AC%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87Bash%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%89%A7%E8%A1%8C%E6%9D%A5%E8%AF%BB%E5%8F%96%E5%8F%98%E9%87%8F%E5%90%8D%E4%BD%9C%E4%B8%BA%E5%8F%82%E6%95%B0%E5%80%BC%E5%90%97%EF%BC%9F.png)
我们有一个简单的脚本,我们使用以下命令执行脚本:
script.sh 123 456
脚本内容
FirstNum=$1
SecondNum=$2
我们可以在执行时传递命令行,而不是在脚本中使用 $1 和 $2 吗?
script.sh FirstNum=123 SecondNum=456 (so that i dont want to call $1 , $2 inside the script)
有没有办法不使用 $1 和 $2 并直接通过命令行传递值?
答案1
对于bash
shell,您将需要使用getopts
它来解析命令行参数。
从https://sookocheff.com/post/bash/parsing-bash-script-arguments-with-shopts/
shell 脚本编写中的一项常见任务是解析脚本的命令行参数。 Bash 提供了 getopts 内置函数来做到这一点。本教程介绍如何使用 getopts 内置函数来解析 bash 脚本的参数和选项。
例子:
while getopts ":f:l:" opt; do
case ${opt} in
f )
firstnum=$OPTARG
l )
lastnum=$OPTARG
;;
\? )
echo "Invalid option: $OPTARG" 1>&2
;;
: )
echo "Invalid option: $OPTARG requires an argument" 1>&2
;;
esac
done
shift $((OPTIND -1))
我建议使用简单的 char 参数:
script.sh -f 123 -l 456
哪里-f
是第一个,哪里-l
是最后一个。