我正在编写一个Shell脚本,并出现意外错误(我以前从未见过)。
代码是这样的:
num=1
case $line in
*.mp3*)
s$num=$total_seconds; # $total_seconds is a variable with numbers like: 11.11
a$num=$file;
num=$(($num + 1));
;;
esac
如果我试图查看这些变量的内容,它就不会显示任何内容。
echo $s1 $a1
echo $s2 $a2
甚至:
for ((i=1; i<=$num; i++))
do
echo $s$i $a$i
done
答案 0 :(得分:2)
如果你可以使用bash(或任何支持数组的shell),那么使用数组:
num=1
declare -a s
declare -a a
case $line in
*.mp3*)
s[num]=$total_seconds # $total_seconds is a variable with numbers like: 11.11
a[num++]=$file
;;
esac
如果你想要POSIX严格的东西,那么事情变得更加艰难。我不想在不了解您的代码的情况下就此提出任何建议。
除此之外:$total_seconds
是一个带有字符串的变量,如11.11。这些shell不支持浮点数。
答案 1 :(得分:2)
bash
仅识别变量赋值。虽然您可以稍微修改您的代码以获得这样的动态生成的变量名称:
num=1
case $line in
*.mp3*)
declare s$num=$total_seconds; # $total_seconds is a variable with numbers like: 11.11
declare a$num=$file;
num=$(($num + 1));
;;
esac
更好的想法是使用kojiro建议的数组。
要动态访问它们,您需要使用间接扩展:
num=1
var="s$num"
echo ${!var} # var must be the name of a variable, not any other more complex expression