内容を含むファイルがありますf1
。
james john joe
marie james
joe
don marie
grep
シェルスクリプトで以下を使用して、s1.sh
各行のコマンドラインパラメータの発生を出力したいと思います。
#!/bin/bash
for ((i = $# ; i > 0 ; i-- ))
do
grep -c $i f1
done
次のように実行するとします。
s1.sh james joe
スクリプトが変数をi
位置パラメータとして解釈するにはどうすればよいですか?
ベストアンサー1
スクリプトの引数を一度に1つずつ使用する場合は、grep
算術ループを実行する必要はありませんfor
。
#!/bin/sh
for pattern do
grep -c -e "$pattern" f1
done
このfor
ループは、スクリプトのパラメータである位置パラメータを繰り返します。各反復で、この値は$pattern
次のコマンドライン引数になります。
また、ダッシュで始まるパターンがオプションとして誤って解釈されるのを防ぐために、-e
上記の方法を使用します。また、単語の分離やファイル名のグロービングを防ぐためにパターンを参照しました。grep
grep
パターンが実際に正規表現ではなく文字列である場合は、withのgrep
使用を検討してください-F
。
位置引数のリストを使用でき"$@"
、上記のループはこれを暗黙的に使用します。繰り返すには、"$@"
次のようにします。
for pattern in "$@"; do
...
done
引用は必須です。それ以外の場合は、スクリプト引数に対してトークン化とファイル名の一致を実行します。
この答えにはシェルコードは必要ないので、-lineを使用していますbash
。/bin/sh
#!