programing

bash에서 $@에서 첫 번째 요소 제거

skycolor 2023. 4. 12. 22:00
반응형

bash에서 $@에서 첫 번째 요소 제거

스크립트에 전달된 인수를 루프할 필요가 있는 bash 스크립트를 쓰고 있습니다.단, 첫 번째 인수는 루프오버하지 말고 루프 전에 체크해야 합니다.

첫 번째 요소를 제거할 필요가 없다면 다음을 수행할 수 있습니다.

for item in "$@" ; do
  #process item
done

루프를 수정하여 첫 번째 반복인지 확인하고 동작을 변경할 수 있지만 너무 해킹적인 것 같습니다.첫 번째 주장을 추출하고 나머지를 반복할 수 있는 간단한 방법이 있을 텐데, 난 그걸 찾을 수 없었어.

를 사용합니다.

읽어주세요$1루프 전 첫 번째 인수(또는$0스크립트명을 확인하고 싶은 경우는,shift그 후 나머지 부분을 루프합니다.$@.

다른 변형에서는 배열 슬라이싱을 사용합니다.

for item in "${@:2}"
do
    process "$item"
done

이것은 어떤 이유로 인해 인수를 그대로 두고 싶은 경우에 도움이 될 수 있습니다.shift파괴적입니다.

firstitem=$1
shift;
for item in "$@" ; do
  #process item
done
q=${@:0:1};[ ${2} ] && set ${@:2} || set ""; echo $q

편집

> q=${@:1}
# gives the first element of the special parameter array ${@}; but ${@} is unusual in that it contains (? file name or something ) and you must use an offset of 1;

> [ ${2} ] 
# checks that ${2} exists ; again ${@} offset by 1
    > && 
    # are elements left in        ${@}
      > set ${@:2}
      # sets parameter value to   ${@} offset by 1
    > ||
    #or are not elements left in  ${@}
      > set ""; 
      # sets parameter value to nothing

> echo $q
# contains the popped element

일반 배열을 사용한 팝의 예시

   LIST=( one two three )
    ELEMENT=( ${LIST[@]:0:1} );LIST=( "${LIST[@]:1}" ) 
    echo $ELEMENT

언급URL : https://stackoverflow.com/questions/2701400/remove-first-element-from-in-bash

반응형