Shell脚本 - 不访问变量的内容

时间:2013-02-04 20:28:22

标签: bash shell variables

我正在编写一个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

2 个答案:

答案 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)

如果LHS是文字而不是表达式,则

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