シェル拡張と位置パラメータ

シェル拡張と位置パラメータ


zgreporと同等のスクリプトを作りたいのですがbzgreptar

私は非常によく似た2つの試みをしましたが、より良い試みがあるのか​​、改善できるのか、それとも何らかの理由で中断されるのだろうかと思います。tar使い方を知っていますが、bzip2シェル拡張に問題があることがよくあります。

初めての使用$@:

#!/bin/bash
FILE_IN="${@: -1}"; ## Take last arg (file name) 
echo "FILE_IN: $FILE_IN"; 

INPUT_PARAMS="${@%%$FILE_IN}"; ## Take all args, but last (options and pattern)
echo "INPUT_PARAMS: $INPUT_PARAMS"; 

### Here I have to treat $INPUT_FILE before using grep (skipped) ###  

grep "$INPUT_PARAMS" "$FILE_IN"; 
exit $?; 

2番目は変数を使用します(上記とほぼ同じですが、いくつかの違いがあります)。

#!/bin/bash
ARGS="$@" 
FILE_IN="${!ARGS[@]: -1}"; ## Take last arg (file name) 

INPUT_PARAMS=${ARGS%%$FILE_IN};

### From here is identical 

すべてがうまくいったようですが、スクリプトを見てはるかに複雑でbzgrepあることがわかりました。だからこれは私のスクリプトがうまくいかないと思います。

どんなアイデアがありますか?改善できますか?

ベストアンサー1

複数のパラメータを保存するには配列が必要です。

file_in="${@: -1}"
input_params=("${@:1:$#-1}")

または:

file_in="${@: -1}"
input_params=("$@")
unset 'input_params[-1]'

または、次のsh構文を使用してください。

n=$#
for file_in do
  shift
  [ "$((n = n - 1))" -gt 0 ] || break
  set -- "$@" "$file_in"
done
# input_params in "$@"

(すべての大文字変数は環境変数用に予約する必要があります。)

おすすめ記事