linux - 如何将前几个命令行参数存储到数组中

标签 linux bash shell

我有一个 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/

相关文章:

linux - QEMU 命令行替换为 libvirt

c++ - Linux 中的 Windows 命名管道支持

linux - 给定两个目录树,如何仅考虑满足条件的文件名来查找哪些文件名相同?

shell - 将非 PNG 图像复制到 X 剪贴板

python - Anaconda tensorflow 包不完整? (只有几千字节的文件大小)

linux - 如何解码 H323 数据包?

找不到 Bash 变量分配和命令

linux - 如何在 bash 中优雅地存储和回显多行?

linux - 如何读取直到分隔符?

linux - 在将设置脚本从 CURL 传输到 BASH 时保留颜色