日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2025/6/15 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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脚本的全部內容,希望文章能夠幫你解決所遇到的問題。

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