매개변수로 전달된 목록에서 함수의 연관 배열을 작성하려고 하는데 작동하지 않습니다.
#!/usr/bin/env bash
function cwd {
echo "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
}
function list_commands {
local root="$1"
local command_list="${*:2}"
declare -A cmds
for cmd in $command_list; do
cmds["#{$cmd}"]+="$root/scripts/displays/$cmd.sh #{pane_current_path} #{pane_id}"
done
echo "$cmds"
}
PLUGIN_ROOT_DIR="$(cwd)"
declare -A cmds=$(list_commands "$PLUGIN_ROOT_DIR" "rbenv_ruby_ver githud")
main "$cmds"
어떻게 해야 할지 모르겠습니다. bash 스크립팅은 저의 장점이 아닙니다(비록 점점 나아지고 있지만).
이 작업을 수행하려면 어떻게 해야 합니까?
이는 tpm tmux 플러그인의 일부로 tmux에서 수행된다는 점을 명심하세요.
답변1
문자열 이외의 데이터 구조는 실제로 쉘 함수 간에 전달될 수 없습니다. 그러나 이름 참조를 사용하여 연관 배열(또는 원하는 다른 변수)의 이름을 전달할 수 있습니다. bash
버전 4.3부터 이름 참조가 가능합니다.
예:
foo () {
declare -n aarr="$1"
aarr["fookey"]=foovalue
}
declare -A myarray
myarray["mainkey"]=mainvalue
foo myarray
for key in "${!myarray[@]}"; do
printf '%s = %s\n' "$key" "${myarray[$key]}"
done
bash
참조 변수 이름( aarr
위)은 참조 변수 이름(위)과 달라야 한다는 요구 사항에 유의하세요 myarray
.
시험:
$ bash script.sh
fookey = foovalue
mainkey = mainvalue