我正在尝试将一些变量推送到bash数组中。由于某些原因我无法理解,我的脚本直接找到变量templates_age
但不在循环中。
您可以尝试BASH Shell Online上的代码。
脚本:
templates_age="42"
templates_name="foo"
echo "age=${templates_age}"
echo "name=${templates_name}"
readarray GREPPED < <($(compgen -A variable | grep "templates_"))
for item in "${GREPPED[@]}"
do
echo "${item}"
done
输出:
age=42
name=foo
./main.sh: line 32: templates_age: command not found
我尝试了不同类型的echo "${item}"
但没有成功。
要从grep
转换为数组,我正在使用此logic。
答案 0 :(得分:1)
要从命令的输出中正确填充数组,请使用进程替换,而不使用名为命令替换的$(...)
:
readarray -t grepped < <(compgen -A variable | grep "templates_")
另请注意使用-t
修剪换行符。
完整脚本:
templates_age="42"
templates_name="foo"
echo "age=${templates_age}"
echo "name=${templates_name}"
readarray -t grepped < <(compgen -A variable | grep "templates_")
declare -p grepped
for item in "${grepped[@]}"
do
printf "%s=%s\n" "${item}" "${!item}"
done
答案 1 :(得分:1)
我不确定您为何要在此使用compgen
和grep
。这不够吗?
for item in "${!templates_@}"; do
printf '%s=%s\n' "$item" "${!item}"
done
如果你真的想填充一个数组,它就像:
一样简单grepped=( "${!templates_@}" )
请参阅参考手册中的Shell Parameter Expansion。