0999:对于base来说值太大了(错误令牌是" 0999")

时间:2015-11-13 16:09:29

标签: string bash variables decimal octal

这是一个缩短版本的脚本,用于从带有自动加载器(最多只有10个磁带)的EXB-8500读取8mm磁带。它包含在磁带数据(直接二进制)中,并将其保存到我们的主存储器和备份中以磁带的4位数字(例如D1002.dat)命名的文件中。在此期间,它记录了信息并在终端中显示其状态,以便我们可以看到它有多远。

angular.module('appModule',[]);
angular.module('appModule')
    .directive('categoryEdit', function($compile) {
       return{
           restrict: 'A',
           priority: 1001,

           compile: function(element){

               var categoryEdit = $ionicHistory.backView() ? false : true;
               element.attr('ng-show', categoryEdit);

               return function(scope,element){
                 var fn=$compile(element, null, 1);
                  fn(scope);
                };
            }
    }
})

在我们达到1000以下(startig at 0999)之前,一切都很艰难。错误代码为#!/bin/bash echo "Please enter number of tapes: [int]" read i j=1 until [ $i -lt $j ] do echo "What is the number of tape $j ?" read Tape_$j (( j += 1 )) done echo "Load tapes into the tower and press return when the drive is ready" read a j=1 until [ $i -lt $j ] do k="Tape_$j" echo "tower1 $j D$(($k)) `date` Begin" BEG=$j" "D$(($k))" "`date`" ""Begin" echo "tower1 $j D$(($k)) `date` End" END=$j" "D$(($k))" "`date`" ""End" echo "$BEG $END" echo "$BEG $END" sleep 2 (( j += 1 )) done echo "tower1 done" 。现在我已经意识到这是因为当我输入前导0时脚本强制八进制值,我知道我应该在脚本中的某处插入一个./tower1: 0999: Value too great for base (error token is "0999"),但问题是:哪里?

还有一种方法可以将10#定义为字符串吗?我觉得这样可以解决很多这些问题

要获取错误,请运行脚本,定义所需的多个磁带(至少一个,lol),并将前导0插入磁带名称

实施例

Tape_$j

1 个答案:

答案 0 :(得分:1)

您不希望将$ k用作数字,而是使用字符串。您使用数值表达式将变量值计算为变量名称。这是非常糟糕的做法。

幸运的是,你可以在bash中使用变量间接来实现你的目标。没有涉及数字,没有错误抛出。

echo "tower1 $j ${!k} `date` Begin"
BEG=$j" "D${!k}" "`date`" ""Begin"

在其他地方同样如此。