シェルスクリプトがあります。
#!/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