스크립트에서 첫 번째 매개변수를 건너뛰는 방법

스크립트에서 첫 번째 매개변수를 건너뛰는 방법

Linux Pocket Guide에는 스크립트의 모든 매개변수를 확인하는 방법에 대한 좋은 예가 있습니다.

for arg in $@
do
   echo "I found the argument $arg"
done

모든 매개변수가 텍스트 파일인 스크립트를 작성 중입니다. 이러한 모든 텍스트 파일을 연결하여 stdout으로 인쇄하지만 첫 번째 매개변수의 내용은 제외해야 합니다. 내 첫 번째 방법은 다음과 같습니다.

for arg in $@
do
   cat "$arg"

done

그러나 여기에는 첫 번째 매개변수가 포함되며 앞서 언급한 것처럼 첫 번째 매개변수를 제외한 모든 매개변수를 인쇄하고 싶습니다.

답변1

shift다음과 같은 명령을 사용할 수 있습니다 .

shift
for arg in "$@"
do
    cat "$arg"
done 

답변2

당신은 그것을 사용할 수 있습니다옮기다내장 기능은 하나 이상의 위치 인수를 삭제하지만 먼저 인수 수를 확인해야 합니다.

if [ "$#" > 1 ]; then
  # Save first parameter value for using later
  arg1=$1
  shift
fi

shift논쟁의 여지가 없는 호출입니다 shift 1.

모든 위치 매개변수를 반복합니다.

for arg do
  : do something with "$arg"
done

cat귀하의 경우 언제 여러 파일을 처리할 수 있기 때문에 루프가 전혀 필요하지 않습니다 .

cat -- "$@"

shift위치 매개변수 없이 호출을 테스트하는 방법은 다음과 같습니다.

$ for shell in /bin/*sh /opt/schily/bin/[jbo]sh; do
  printf '[%s]\n' "$shell"
  "$shell" -c 'shift'
done

산출:

[/bin/ash]
/bin/ash: 1: shift: can't shift that many
[/bin/bash]
[/bin/csh]
shift: No more words.
[/bin/dash]
/bin/dash: 1: shift: can't shift that many
[/bin/ksh]
/bin/ksh: shift: (null): bad number
[/bin/lksh]
/bin/lksh: shift: nothing to shift
[/bin/mksh]
/bin/mksh: shift: nothing to shift
[/bin/pdksh]
/bin/pdksh: shift: nothing to shift
[/bin/posh]
/bin/posh: shift: nothing to shift
[/bin/sh]
/bin/sh: 1: shift: can't shift that many
[/bin/tcsh]
shift: No more words.
[/bin/zsh]
zsh:shift:1: shift count must be <= $#
[/opt/schily/bin/bsh]
shift: cannot shift.
[/opt/schily/bin/jsh]
/opt/schily/bin/jsh: cannot shift
[/opt/schily/bin/osh]
/opt/schily/bin/osh: cannot shift

글쎄, bash침묵, 입장 논쟁은 없습니다. 자리 표시자를 사용하여 전화 $0:

"$shell" -c 'shift' _

csh변주 도 했고 샤이 bsh도 침묵을 지켰다. 오류가 발생하면 var zsh, cshVariant 및 schily는 bsh오류 보고 후 비대화형 스크립트를 종료하지 않습니다.

답변3

shift명령을 사용하여 매개변수를 이동하고 첫 번째 매개변수를 삭제할 수 있습니다. 예는 다음과 같습니다.

arg1=$1
shift
for arg in "$@"; do
  cat "$arg"
done

답변4

배열 슬라이싱을 사용할 수 있습니다 ${@:2}.

$ foo () { echo "The args are ${@:2}" ;}
$ foo spam egg bar
The args are egg bar

관련 정보