@forループまでのパラメータ2を使用してください。

@forループまでのパラメータ2を使用してください。

シェルスクリプトがあります。

#!/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つのパラメータはパラメータリストから移動されます。常に変数/パラメータを引用することを忘れないでください。いいえシェルに単語分割を実行させる。

#!/bin/bash

exec_command -k -q "$1"
shift 1

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

よりshift詳しくはマニュアルページをご覧ください。これはシェル全体で利用可能なPOSIX互換オプションです。

bashまたは、次のように引数リストのインデックスベースの拡張を実行する別の方法(特定)$@で、ワードの2番目の要素から始めて繰り返します。

#!/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

関連情報