![Bash: 위치 매개변수 슬라이싱](https://linux55.com/image/33775/Bash%3A%20%EC%9C%84%EC%B9%98%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%20%EC%8A%AC%EB%9D%BC%EC%9D%B4%EC%8B%B1.png)
$@
모든 위치 인수를 다른 배열에 먼저 복사하지 않고 Bash에서 섹션을 얻으려면 어떻게 해야 합니까 ?
argv=( "$@" )
echo "${argv[@]:2}";
답변1
다른 배열과 동일한 형식을 사용할 수 있습니다. 두 번째 및 세 번째 요소를 추출하려면 $@
다음을 수행할 수 있습니다.
echo "${@:1:2}"
- -
| |----> slice length
|------> slice starting index
답변2
Bash의 더 많은 배열 슬라이싱 예제
some_array_variable
코드에서 사용하는 대신 ( argv
귀하의 경우) @
해당 변수 이름 대신 사용하세요. 기호는 @
다음을 나타냅니다.입력 매개변수 배열, 다른 배열처럼 처리할 수 있습니다. 혼란스럽게도 우리는 이 문자가 거의 항상 $
다음과 같은 문자와 쌍을 이루는 것을 보는 데 익숙하기 때문에 이 문자가 배열 자체이고 자체적으로 배열 변수로 사용될 수도 있다는 $@
것을 인식하지 못합니다 .@
다음은 몇 가지 예입니다.
입력 매개변수 배열에서 슬라이싱하면 @
일반적으로 간단하게 배열을 보고 액세스할 수 있습니다 $@
.
# array slicing basic format 1: grab a certain length starting at a certain
# index
echo "${@:2:5}"
# │ │
# │ └────> slice length
# └──────> slice starting index
# array slicing basic format 2: grab all remaining array elements starting at a
# certain index through to the end
echo "${@:2}"
# │
# │
# └──────> slice starting index
기억할 만한 더 많은 배열:
다음은 나 자신에게 일반적인 알림이며 이 페이지를 방문하는 다른 사람들에게 도움이 될 수 있습니다.
# store a slice from an array into a new array
new_array=("${@:4}")
# print the entire array
echo "new_array = ${new_array[@]}"
다음은 bash의 일반 배열 슬라이싱 및 배열 요소 액세스에 대한 실행 가능한 예입니다., 에서 영감을 받다이 소스:
( 사용 사례에 따라 필요한 경우 아래 @
대신 입력 매개변수 배열로 사용할 수 있습니다 )a
a=(one two three four five six) # define a new array, `a`, with 6 elements
echo "$a" # print first element of array a
echo "${a}" # print first element of array a
echo "${a[0]}" # print first element of array a
echo "${a[1]}" # print *second* element of array a
echo "${#a[@]}" # print number of elements in array a
echo "${a[@]:1:3}" # print 2nd through 4th elements; ie: the 3 elements
# starting at index 1, inclusive, so: indices 1, 2, and 3
# (output: `two three four`)
echo "${a[@]:1}" # print 2nd element onward
모두 실행
위의 모든 코드 블록을 실행 파일이라는 파일에 복사하여 붙여넣고 실행할 수 있도록 array_slicing_demo.sh
실행 파일로 표시합니다 . chmod +x array_slicing_demo.sh
아니면 내 데모를 다운로드하세요.array_slicing_demo.sh내 파일eRCAGuy_hello_world 창고는 여기입니다.
그런 다음 다음과 같이 실행하십시오.
./array_slicing_demo.sh a b c d e f g h i j k
...다음과 같은 출력이 표시됩니다.
b c d e f b c d e f g h i j k new_array = d e f g h i j k one one one two 6 two three four two three four five six
인용하다
키워드: bash 배열 인덱스; bash 배열 슬라이싱의 배열 요소 액세스;
답변3
나는 보통 이렇게 합니다:
somefunc() {
local message="$1"
shift
echo "message = $message"
echo "other = $@"
}
somefunc first second third goforth
그러면 다음이 인쇄됩니다:
message = first
other = second third goforth
shift
두 번째, 세 번째 등의 매개변수 뒤에 ing을 사용하여 이 개념을 확장할 수 있습니다.
답변4
함수 매개변수의 경우 답변이 echo "${@:1:2}"
전혀 작동하지 않습니다. 또한 첫 번째 요소는 다른 매개변수이므로 잘라내고 싶습니다. 작동하는 것은 다음과 같습니다.
function foo(){ #takes single param + array of params
local param1="$1". #first param
local -a tmp=( "${@}" ) #copy all params
local -a rem_params=( "${tmp[@]:1}") #slice off first:Works!
# local -a rem_params=( "${@[@]:1}" ) #DID NOT WORK, ERROR
# local -a rem_params=( "{@:1}" ) #DID NOT SLICE
echo "${rem_params[@]}"
}
아마도 스크립트 수준에서 위치 매개변수가 어떻게 작동하는지 작성하고 테스트하겠지만 지금은 시간이 없습니다.