我有一个 shell 脚本,它从命令行获取输入参数。以下只有两个选项:
./test.sh 20180415 20180416 20180417 20180418 2
./test.sh 20180418 2
第一个选项需要 5 个输入参数,其中前四个是日期格式“YYYYMMDD”,我想将这些日期存储在数组变量中:sets_date=("$@")
和最后一个参数是 2
我将把它存储在不同的变量中。
第二个选项采用 2 个输入参数,其中第一个采用相同的日期格式,我仍然想将该日期存储在数组变量中,最后一个参数存储在不同的变量中。 这是我仅有的两个选择。
#!/bin/bash
sets_date=("$@")
# store number in variable
这可以在 shell 脚本中完成吗?所以我的 shell 脚本要么接受 5 个输入参数,要么只接受 2 个输入参数,并且不会有任何其他组合。
最佳答案
你可以使用数组扩展技术来做到这一点。首先,您只需要存储第一个元素和最后一个元素。第一种技术的语法很简单,${@:startpos:endpos}
。我们将起始位置设置为 1,因为 0 代表正在使用的实际脚本的名称。结束位置是通过从 $#
中减去一个来得出的,它表示传递的总位置参数的计数。
exceptLastElem=( "${@:1:$#-1}" )
最后一个元素
lastElement="${@:$#}"
把它放在一个虚拟函数上
ap() { echo "except last ${@:1:$#-1}" ; echo "last ${@:$#}" ; }
现在调用带有多个参数的函数
ap 1 2 3 4
except last 1 2 3
last 4
关于linux - 如何将前几个命令行参数存储到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49964158/