zgrep
or 와 동등한 스크립트를 만들고 싶지만 bzgrep
.tar
나는 매우 유사한 두 가지 시도를 했는데 더 나은 시도가 있는지, 개선할 수 있는지, 아니면 어떤 이유로 인해 중단되는지 궁금합니다. 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 $?;
두 번째는 변수를 사용합니다(위와 거의 동일하지만 몇 가지 차이점이 있습니다).
#!/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 "$@"
(모든 대문자 변수는 환경 변수용으로 예약되어야 합니다.)