使用参数 2 直到 @for 循环

使用参数 2 直到 @for 循环

我有一个外壳脚本:

#!/bin/bash
exec_command -k -q $1

for i in $@
do
  grep --color=always "$i" file
done

我将脚本称为

./grepskript -v searchstring1 searchstring2

我想使用第一个参数exec_command和循环的所有其他参数do。我该怎么做?

答案1

shift根据需要使用该命令推送位置参数。在您的情况下,这样做会将(即第一个参数)与其余参数shift 1分开。$1同样,shift 2将从参数列表中移动前 2 个参数,依此类推。并始终记住引用您的变量/参数不是让 shell 进行分词。

#!/bin/bash

exec_command -k -q "$1"
shift 1

for i in "$@"; do
  grep --color=always "$i" file
done

请参阅shift手册页以了解更多信息。这是跨 shell 可用的 POSIX 兼容选项。

或者另一种方法(bash特定的)对参数列表进行基于索引的扩展,$@如下所示,从病房的第二个元素开始循环。

#!/bin/bash

exec_command -k -q "$1"

for i in "${@:2}"; do
  grep --color=always -- "$i" file
done

另外,在第一种方法中迭代位置参数时,您只需这样做

for i; do
  grep --color=always -- "$i" file
done

相关内容