我有一个脚本(应该是)将动态变量名称(s1,s2,s3,...)分配给目录路径:
savedir() {
declare -i n=1
sn=s$n
while test "${!sn}" != ""; do
n=$n+1
sn=s$n
done
declare $sn=$PWD
echo "SAVED ($sn): ${!sn}"
}
这个想法是用户在他们想要稍后回忆的目录中,并且可以通过键入“已保存的”来将其保存到shell变量中。它实际上成功地写出了echo语句:如果我在目录/ home / mrjones中并键入' savedir',脚本将返回: SAVED(s1):/ home / mrjones
...我可以进一步输入:
echo $ sn
并返回脚本: S1
...但是输入......
> echo $s1
......或
echo $ {!sn}
...两者都不返回(空字符串)。如果不明显的话,我想要的是:
echo $ s1
/home/mrjones
非常感谢任何帮助! [为格式化道歉...]
答案 0 :(得分:1)
要使用存储在另一个变量中的名称设置变量,我使用printf -v
,在此示例中:
printf -v "$sn" '%s' "$PWD"
declare
这里是为函数创建一个局部变量,它似乎不是你想要的。引自help declare
:
在函数中使用时,
declare
会使NAME成为本地名称,与local
一样 命令。-g
选项会抑制此行为。
因此您可以尝试使用-g
或使用printf
答案 1 :(得分:1)
改为使用数组。
savedir() {
s+=("$PWD")
echo "SAVED (s[$((${#s[@]}-1))]): ${s[${#s[@]}-1]}"
}