반응형
bash에서 $ @에서 첫 번째 요소 제거
이 질문에는 이미 답변이 있습니다.
스크립트에 전달 된 인수를 반복 해야하는 bash 스크립트를 작성 중입니다. 그러나 첫 번째 인수를 반복해서는 안되며 대신 루프 전에 확인해야합니다.
첫 번째 요소를 제거하지 않아도되면 다음을 수행 할 수 있습니다.
for item in "$@" ; do
#process item
done
루프를 수정하여 첫 번째 반복인지 확인하고 동작을 변경할 수는 있지만 너무 해킹 된 것처럼 보입니다. 첫 번째 인수를 추출하고 나머지를 반복하는 간단한 방법이 있어야하지만 찾을 수 없었습니다.
사용 shift?
http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_07.html
기본적으로 $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
반응형
'IT story' 카테고리의 다른 글
| Typescript와 함께 Object.values를 사용하는 방법은 무엇입니까? (0) | 2020.07.18 |
|---|---|
| Entity Framework 5에 자식 개체의 자식 개체를 포함시키는 방법 (0) | 2020.07.18 |
| 문자열의 주어진 색인에서 문자를 바꾸시겠습니까? (0) | 2020.07.18 |
| 파이썬에서“.append ()”와“+ = []”의 차이점은 무엇입니까? (0) | 2020.07.18 |
| null이 아닌 자바 스크립트 검사 (0) | 2020.07.18 |