2014-04-01 80 views
0

我有一個Java程序,我在命令行中調用像這樣:擊增加了一個額外字符java調用

java -cp bin Main a b 2 

最後一個參數是重要的,因爲它是一個數字,我用的Integer.parseInt閱讀它。當我使用bash腳本,我使用:

java -cp bin Main $1 $2 $3 

而且我所說的腳本:

./script a b 2 

然而,當我調用腳本無法解析2,因爲有一個額外的字符添加到最後一個參數。我試圖打印第二個字符,但它不打印可讀的字符。我假設額外的字符是\ n或\ r或某些這樣的字符。當我將「2」作爲第二個參數而不是第三個時,這不會發生。任何人都可以幫助我理解發生了什麼?我只是忽略了最後一個字符?謝謝。

+4

**請**發佈真實的「劇本」。 –

+2

聽起來就像你在Windows上創建了bash腳本,因此該文件具有CRLF行尾。嘗試在文件上使用dos2unix。 –

回答

3

Bash沒有添加任何東西。你的編輯做到了。務必確保將文件保存爲UNIX格式的文本文件以避免回車。

只是爲了練習,讓我們做一個簡單的,自包含的測試用例,讓自己和其他人更容易找出您的問題。有關這方面的提示在bash tag wiki中描述。

這裏有一個簡單的程序來調用驗證的行爲:

$ cat javamock 
#!/bin/bash 
echo "The third argument has ${#3} characters" 

$ ./javamock a b 2 
The third argument has 1 characters 

這裏就是你所看到的

$ cat yourscript 
./javamock $1 $2 $3 

$ bash yourscript a b 2 
The third argument has 2 characters 

好了,我們該如何診斷呢?下面是我們如何能告訴什麼是與您的腳本:

$ shellcheck yourscript 
In yourscript line 1: 
./javamock $1 $2 $3 
        ^-- SC1017: Literal carriage return. Run script through tr -d '\r' . 

或如何確認,如果你已經知道你在找什麼:

$ cat -v yourscript 
./javamock $1 $2 $3^M 

最後,應用修復:

$ tr -d '\r' <yourscript >fixedscript 
$ bash fixedscript a b 2 
The third argument has 1 characters 
1

清理輸入修剪尾隨和前導空白(不僅僅是命令行參數,而且大部分時間是在閱讀文本數據時),這是明智的做法。

如果您想知道它是什麼字符,請嘗試打印其數值(轉換爲short)。

相關問題