簡體   English   中英

Bash向Java調用添加了額外的字符

[英]Bash adds an extra character to java call

我有一個從命令行調用的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”作為第二個參數而不是第三個參數時,這不會發生。 誰能幫助我了解發生了什么事? 我是否忽略了最后一個字符? 謝謝。

Bash沒有添加任何東西。 您的編輯做了。 始終確保將文件另存為UNIX格式的文本文件,以避免回車。

僅出於練習目的,讓我們制作一個簡單的自包含測試用例,以使我們自己和其他人更容易發現您的問題。 bash標簽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

清理輸入內容以修剪尾部和前導空格是明智的(不僅用於命令行參數,而且在大多數情況下,當您讀取文本數據時)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM