Я нашел отличный ответ на StackOverflow, в котором объясняется, как передать ассоциативный массив в функцию. Может ли кто-нибудь помочь мне выяснить, что указывает синтаксис ${1#*=}
в приведенном ниже коде? (Позаимствовано из этого ответа от Джейпал Сингх):
#!/bin/bash
declare -A weapons=(
['Straight Sword']=75
['Tainted Dagger']=54
['Imperial Sword']=90
['Edged Shuriken']=25
)
function print_array {
eval "declare -A arg_array="${1#*=}
for i in "${!arg_array[@]}"; do
printf "%s\t%s\n" "$i ==> ${arg_array[$i]}"
done
}
print_array "$(declare -p weapons)"
Вот мои догадки на данный момент (поправьте меня, если я ошибаюсь в каком-либо из них):
- 1
означает первый параметр, переданный функции ($1
или ${1}
)
- #
означает индекс $1
, который, поскольку $1
является ассоциативным массивом, #
становится ключами $1
- *
означает значения #
ключей в ассоциированном массиве $1
Это оставляет =
. Что это значит? Это похоже на способ показать, что вы хотите, чтобы #
и *
означали ключи и значения ассоциированного массива?