「string」で始まる変数と同じ数の引数を関数に渡すにはどうすればよいでしょうか?

「string」で始まる変数と同じ数の引数を関数に渡すにはどうすればよいでしょうか?

例 :

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

関連情報