zgrep
orと同等のスクリプトを作りたいのですがbzgrep
。tar
私は非常によく似た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 "$@"
(すべての大文字変数は環境変数用に予約する必要があります。)