パラメータとして渡されたリストから関数の連想配列を作成しようとしても機能しません。
#!/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