日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

linux命令行参数含空格,linux-具有命令行参数和空格的Perl脚本

發布時間:2025/6/15 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux命令行参数含空格,linux-具有命令行参数和空格的Perl脚本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我覺得我在這里似乎遺漏了一些明顯的東西,但是我似乎無法弄清楚發生了什么.我有一個從C代碼調用的perl腳本.腳本參數是這樣的:

my_script "/some/file/path" "arg" "arg with spaces" "arg" "/some/other/file"

當我在Windows中運行它時,Perl正確地將其標識為5個參數,而當我在SunOS Unix計算機上運行它時,它標識為8,將帶有空格的arg拆分為單獨的args.

不知道它是否有任何區別,但是在Windows中,我像這樣運行它:

perl my_script

在Unix中,我只是將其作為可執行文件運行,如上圖所示.

知道為什么Unix無法正確管理該參數嗎?

編輯:

這是調用perl腳本的代碼:

char cmd[1000];

char *script = "my_script";

char *argument = "\"arg1\" \"arg2\" \"arg3 with spaces\" \"arg4\" \"arg5\"";

sprintf( cmd, "%s %s >1 /dev/null 2>&1", script, arguments);

system( cmd );

并非如此,因為我動態地構建了參數字符串,但這是要點.

另外,這是我的代碼,用于讀取以下參數:

($arg1, $arg2, $arg3, $arg4, $arg5) = @ARGV;

我知道這很荒謬,但是該腳本只能從C應用程序運行,因此不需要任何更復雜的事情.

解決方法:

想必

system("my_script \"/some/file/path\" \"arg\" \"arg with spaces\" \"arg\" \"/some/other/file\");

導致所有內容都經過重擊(因為需要解釋shebang行,吃掉您傳遞的引號).再次,大概可以通過直接調用perl而不是依靠shell來找到它來避免該問題(盡管如果路徑上的perl與shebang線上提供的perl不同,則可能會出現問題).

更新:

鑒于您:

char *argument = "\"arg1\" \"arg2\" \"arg3 with spaces\" \"arg4\" \"arg5\"";

您可能要嘗試:

char *argument = "\\\"arg1\\\" \\\"arg2\\\" \\\"arg3 with spaces\\\" \\\"arg4\\\" \\\"arg5\\\"";

另一個更新:

感謝您接受我的回答,但是,我的整個理論可能是錯誤的.

我在GNU bash中嘗試了上述參數的雙反版本,版本為4.0.28(2)-release(i686-pc-linux-gnu),但最終通過了

[sinan@kas src]$./t

'"arg1"'

'"arg2"'

'"arg3'

'with'

'spaces"'

'"arg4"'

'"arg5"'

而最初的論點就像一個魅力.我對此有些疑惑.也許SUN上的外殼不是bash,或者可能正在發生其他情況.

標簽:linux,perl

來源: https://codeday.me/bug/20191024/1920458.html

總結

以上是生活随笔為你收集整理的linux命令行参数含空格,linux-具有命令行参数和空格的Perl脚本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。