shell 拆分并转换为int [duplicate]时Bash脚本命令输出错误

qaxu7uf2  于 2023-06-24  发布在  Shell
关注(0)|答案(3)|浏览(143)

此问题已在此处有答案

Why does my tool output overwrite itself and how do I fix it?(3个答案)
13天前关闭。
我创建了一个bash脚本来读取另一个命令(java -jar ...)的输出。
命令的结果如下所示:

MIN,MAX
6165350,6228865

我使用head -2 | tail -1省略了第一行,因此输出将变为

6165350,6228865

我把它保存到变量output

output=$(java -jar bundletool.jar get-size total --apks=$APKS_PATH | head -2 | tail -1)

最后,我创建java文件来分割输出结果

import java.util.*;

public class Demo {
    public static void main(String[] args) {
        String[] values = args[0].split(",");

        System.out.println(Integer.parseInt(values[0]));
        System.out.println(Integer.parseInt(values[1]));
    }
}

下面是最后的bash脚本

#!bin/bash
output=$(java -jar bundletool.jar get-size total --apks=$APKS_PATH | head -2 | tail -1)
java Demo $output

当我运行bash时,为什么我会得到错误

6165350
"xception in thread "main" java.lang.NumberFormatException: For input string: "6228865
        at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.base/java.lang.Integer.parseInt(Integer.java:652)
        at java.base/java.lang.Integer.parseInt(Integer.java:770)
        at Demo.main(Demo.java:8)

当我尝试更改output时,得到了正确的结果。

output="6165350,6228865"

谢谢你

2izufjch

2izufjch1#

我怀疑在最后一个参数的末尾有一个\r,这解释了为什么Exception被拼写为"xception
您可以通过将输出通过管道传输到十六进制转储来确认这一点。

java -jar bundletool.jar get-size total --apks=$APKS_PATH | head -2 | tail -1 | xxd

您可以在bash部分中使用tr -d '\r'修剪\r,或者在Java部分中删除参数。

String[] values = args[0].strip().split(",");
vddsk6oq

vddsk6oq2#

如果有一个 non-printing character,通常 String#strip 方法会删除它。

  • String#trim* 也可以工作。

试试下面的方法。

public static void main(String[] args) {
    String[] values = args[0].split(",");

    System.out.println(Integer.parseInt(values[0].strip()));
    System.out.println(Integer.parseInt(values[1].strip()));
}
baubqpgj

baubqpgj3#

既然您提到bundletool.jar生成一个回车作为行尾,我将(如果您不能更改Java程序以生成合理的行尾)简单地执行一个

nums=( $(java .... bundletool.jar ... |dos2unix|awk -F , '{print $1, $2}') )

然后,第一个数字为${nums[0]},第二个数字为${nums[1]}

相关问题