"문자열"로 시작하는 변수만큼 많은 인수를 함수에 전달할 수 있나요?

"문자열"로 시작하는 변수만큼 많은 인수를 함수에 전달할 수 있나요?

예:

VARIABLE1="/foo/bar"
VARIABLE2="/some/other/path"
# etc you don't know how many variables there is, maybe 3 maybe 30.
# Then :
randomfunction $VARIABLE1 $VARIABLE2 #... <- How do I replace this to something that would include every variable starting with name "VARIABLE"

편집하다

오해가 있는 부분이 있어서 다른 말로 표현하겠습니다.

어떻게 만드나요?

VAR1="foo"
VAR2="bar"
VAR3="job"

출력은 다음과 같습니다

"foo bar job"VAR 개수를 모르면 VAR4, VAR5 등이 있을 수 있습니다.

답변1

인수 없이 명령을 실행하면 set세션에 대해 설정된 모든 변수와 함수가 출력됩니다. 이를 염두에 두고 변수를 필터링한 다음 원하는 "문자열"에서 배열에 할당한 다음 배열을 전달합니다. 함수.

ALL_VARIABLES=( $(set | grep -Ea '^VARIABLE.*=' | cut -d = -f 2) )
randomfunction "${ALL_VARIABLES[@]}"

기본적으로 문자와 등호로 시작하는 모든 줄의 출력을 얻은 다음 set이를 개별 이름과 값에 전달하고 모든 값을 배열에 할당한 다음 확장하여 매개 변수로 전달합니다.grepVARIABLEcutALL_VARIABLESrandomfunction

답변2

배열을 사용하고 배열을 함수에 전달할 수 있습니다.

#!/bin/bash

Variable=(/tmp /tmp/a.txt /tmp/b.txt)

function Test(){
Values=("$@")
echo "${Values[0]}"
echo "${Values[1]}"
echo "${Values[2]}"
}


echo "${Variable[0]}"
echo "${Variable[1]}"
echo "${Variable[2]}"
echo "${Variable[@]}"

#Call the Test function and pass the array
Test "${Variable[@]}"

관련 정보