配列変数名を取り、内容を更新する関数を書きたいと思います。例えば:
ARRAY1=("test 1" "test 2" "test 3")
toUpper ARRAY1
for arg in "${ARRAY1[@]}"; do
echo "arg=$arg"
done
# output
arg=TEST 1
arg=TEST 2
arg=TEST 3
これを行うには、入力配列のコピーが必要な大雑把な試みがあります。間接参照を使用して、入力変数のコピーを作成できます。配列のコピーは、要素の数を取得するために使用されます。これを行うためのより良い方法があれば、私に知らせてください。
function toUpper() {
local ARRAY_NAME=$1
local ARRAY_REF="$ARRAY_NAME[@]"
# use an indirect reference to copy the array so we can get the count
declare -a ARRAY=("${!ARRAY_REF}")
local COUNT=${#ARRAY[@]}
for ((i=0; i<$COUNT; i++)); do
local VAL="${ARRAY[$i]}"
VAL=$(echo $VAL | tr [:lower:] [:upper:])
echo "ARRAY[$i]=\"$VAL\""
eval "$ARRAY_NAME[$i]=\"$VAL\""
done
}
ARRAY1=( "test" "test 1" "test 3" )
toUpper ARRAY1
echo
echo "Printing array contents"
for arg in "${ARRAY1[@]}"; do
echo "arg=$arg"
done