"문자열"로 시작하는 변수만큼 많은 인수를 함수에 전달하는 방법은 무엇입니까?

"문자열"로 시작하는 변수만큼 많은 인수를 함수에 전달하는 방법은 무엇입니까?

예 :

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[@]}"

관련 정보