【问题标题】:How to find (n+1)th argument value if you find nth value as part of string match from $@ in a bash script如果在 bash 脚本中从 $@ 中找到第 n 个值作为字符串匹配的一部分,如何找到第 (n+1) 个参数值
【发布时间】:2020-09-06 06:44:35
【问题描述】:

我们有一个 Bash 脚本。如果从 $@ 中找到第 n 个值作为字符串匹配的一部分,如何找到第 (n+1) 个参数值。 n 未知。

  1. 有没有办法找到 n 的位置或值?我知道如果输入参数与我要查找的所需字符串匹配,我可以找到它。
  2. 如果我从输入列表中找到参数,如何找到下一个 ((n+1)th) 位置的输入参数。

【问题讨论】:

  • 你不能用shift [n]吗?如果没有,那你能分享一个例子吗?
  • 这是一个XY question 用于“我如何解析像./myscript -n 4 -s foo 这样的命令行选项?”
  • 是的,合适的例子 ./myscript -n 4 -s foo.假设我的字符串与 -s 匹配,那么我应该考虑 foo。 @Jetchisel 解释得很好。我正在寻找他提到的最后一个例子。

标签: linux bash shell unix ksh


【解决方案1】:

您可以遍历参数。

#!/usr/bin/env bash
n=1
for f; do
  printf '%s %s\n' "$n" "$f"
  ((n++))
done

针对一堆参数运行它。

./myscript {a..z}

输出

1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
9 i
10 j
11 k
12 l
13 m
14 n
15 o
16 p
17 q
18 r
19 s
20 t
21 u
22 v
23 w
24 x
25 y
26 z

如果您只对一个论点感兴趣,请说g

#!/usr/bin/env bash

n=1
for f; do
  [[ $f == g ]]  &&  printf '%s %s\n' "$n" "$f"
  ((n++))
done
./myscript {a..z}

输出

7 g

要回答n+1 参数,请将参数放入/分配数组中并循环遍历索引,现在假设您想要g 之后的下一个参数,注意n+1 标记点和数组计数从零开始,而不是一,诸如此类。

#!/usr/bin/env bash

args=("$@")

for n in "${!args[@]}"; do
  [[ ${args[n]} == g ]] && echo "${args[n+1]}"
done
./myscript {a..z}

输出

h

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
相关资源
最近更新 更多