-inf
기본적으로 매개변수 목록에서 첫 번째 항목을 "가져오고" 싶습니다. (나머지 매개변수는 다른 명령으로 전달됩니다.)
내 스크립트의 구조는 다음과 같습니다.
#!/bin/sh
<CODE>
for POSITIONAL_PARAM in "$@"
do
<CODE>
if [ "$POSITIONAL_PARAM" = '-inf' ]
then
<PLUCK $POSITIONAL_PARAM FROM $@>
break
fi
<CODE>
done
<CODE>
some-other-command "$@"
# end of script
이를 수행할 수 있는 좋은 방법이 있습니까?
그건 그렇고, 나는 주로 에 적용되는 답변에 관심이 있지만 /bin/sh
에만 적용되는 답변에도 관심이 있습니다 /bin/bash
.
답변1
POSIX적으로:
for arg do
shift
[ "$arg" = "-inf" ] && continue
set -- "$@" "$arg"
done
printf '%s\n' "$@"
위 코드는 원래 Almquist 셸을 제외하고 POSIX 이전 셸에서도 실행됩니다(읽기).미주). 루프를 for
다음과 같이 변경합니다.
for arg
do
...
done
모든 쉘에서 작동이 보장됩니다.
또 다른 POSIX:
for arg do
shift
case $arg in
(-inf) : ;;
(*) set -- "$@" "$arg" ;;
esac
done
이 경우 POSIX 이전 셸에서 작동하려면 (
첫 번째 항목을 제거해야 합니다 .(pattern)
답변2
-
유사한 문제를 해결하려고 시도하는 동안 이것을 발견했지만 옵션이 아닌 모든 매개변수( 로 시작하지 않는 매개변수 )를 수신된 구분 기호까지 모두 처리하고 싶었습니다 --
. 처리된 매개변수를 꺼내고 나머지 매개변수는 제공된 순서대로 그대로 두려고 합니다.
이것이 내가 생각해 낸 것입니다.
parse=true
for arg do
[ "$arg" == '--' ] && parse=false
shift
if $parse && [ "${arg:0:1}" != '-' ]
then
echo handling $arg
else
set -- "$@" "$arg"
fi
done