如何在 Bash 脚本中更好地处理命名命令行参数?
How to do named command line arguments in Bash Scripting better way?
这是我的示例 Bash 脚本 example.sh:
#!/bin/bash
# Reading arguments and mapping to respective variables
while [ $# -gt 0 ]; do
if [[ == *"--"* ]]; then
v="${1/--/}"
declare $v
fi
shift
done
# Printing command line arguments through the mapped variables
echo ${arg1}
echo ${arg2}
现在如果在终端 I 运行 bash 脚本如下:
$ bash ./example.sh "--arg1=value1" "--arg2=value2"
我得到正确的输出,如:
value1
value2
完美!这意味着我能够使用 bash 脚本中的变量 ${arg1} 和 ${arg2} 来使用传递给参数 --arg1 和 --arg2 的值。
我现在对这个解决方案很满意,因为它符合我的目的,但是,任何人都可以建议任何更好的解决方案来在 bash 脚本中使用命名命令行参数?
您可以只使用环境变量:
#!/bin/bash
echo "$arg1"
echo "$arg2"
无需解析。从命令行:
$ arg1=foo arg2=bar ./example.sh
foo
bar
甚至还有一个 shell 选项可以让您将赋值放在任何地方,而不仅仅是在命令之前:
$ set -k
$ ./example.sh arg1=hello arg2=world
hello
world
这是我的示例 Bash 脚本 example.sh:
#!/bin/bash
# Reading arguments and mapping to respective variables
while [ $# -gt 0 ]; do
if [[ == *"--"* ]]; then
v="${1/--/}"
declare $v
fi
shift
done
# Printing command line arguments through the mapped variables
echo ${arg1}
echo ${arg2}
现在如果在终端 I 运行 bash 脚本如下:
$ bash ./example.sh "--arg1=value1" "--arg2=value2"
我得到正确的输出,如:
value1
value2
完美!这意味着我能够使用 bash 脚本中的变量 ${arg1} 和 ${arg2} 来使用传递给参数 --arg1 和 --arg2 的值。
我现在对这个解决方案很满意,因为它符合我的目的,但是,任何人都可以建议任何更好的解决方案来在 bash 脚本中使用命名命令行参数?
您可以只使用环境变量:
#!/bin/bash
echo "$arg1"
echo "$arg2"
无需解析。从命令行:
$ arg1=foo arg2=bar ./example.sh
foo
bar
甚至还有一个 shell 选项可以让您将赋值放在任何地方,而不仅仅是在命令之前:
$ set -k
$ ./example.sh arg1=hello arg2=world
hello
world