例 :
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
、任意の文字と等号が続く行からのすべての出力を取得し、それをに渡して名前と値を分離し、すべての値を配列に割り当てます。その後、配列は展開されて引数として渡されます。grep
VARIABLE
cut
ALL_VARIABLES
randomfunction
答え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[@]}"