0

我有收到3個arugments一個Perl腳本。perl腳本參數包含雙定額「

第一個參數是很長,包含空格和引號,我居然不知道應該期待它可以是任何尺寸大小是什麼要分開我的論點我用 「:」 籤

見例如: ./my_script.pl 2MT5 4XAW KEAR TTRR YYMM 「TEMP 2012年2月1」:單:123.x

的問題是,我輸了雙引號和空格。參見輸出:

LOG The 1st input is:2MT54XAWKEARTTRRYYMMTEMP 2012 FEB 01 

LOG Type is:Single 

LOG Version is:123.x 

我的代碼:

open (FD, ">file2.txt"); 

print FD @ARGV; 

close FD; 

my $str1=`cat file2.txt`; 

my @argv_values = split(':',$str1); 

$new_str = $argv_values[0]; 

$type = $argv_values[1]; 

$ver = $argv_values[2]; 

回答

3

你的Perl程序沒有收到3個參數,它收到6個參數。只需打印出來看看你自己:

perl -le 'print for @ARGV' 2MT5 4XAW KEAR TTRR YYMM "TEMP 2012 FEB 01":Single:123.x 

你的第一個參數(2MT5)不是「很長」,它只有4個字符。

你沒有Perl問題,你有一個shell問題。 shell將空格分開並處理雙引號。如果你不想這樣做,那麼你必須引用任何包含空格或引號的參數:

./my_script.pl '2MT5 4XAW KEAR TTRR YYMM "TEMP 2012 FEB 01":Single:123.x' 
+0

謝謝單引號幫我 – Toren 2011-04-17 13:43:37

+0

謝謝,我正面臨類似的問題 - 事實證明我有殼問題,就像你說過的@ tadmc – RockyMM 2014-08-29 18:08:44

3

它是殼丟棄這些字符。傳遞參數正確(包括引用任何包含空格,並逃避內部的任何報價),這將不會是一個問題:

./my_script.pl "2MT5 4XAW KEAR TTRR YYMM \"TEMP 2012 FEB 01\"" "Single" "123.x" 

那麼你不需要惹分裂和加入的周圍。您將首先正確地組織參數。

0
  • 當然你失去了雙引號。這是標準的* NIX命令行行爲,其中雙引號表示您希望其中的內容作爲一個參數處理。
  • 而當你的print項目列表,他們將被連接只需

,最簡單的方式做你打算什麼是print "@ARGV";因爲默認列表分隔符,用於插值名單,是一個單一的空間。

+0

謝謝。你的回答幫助我理解了這個問題。 – Toren 2011-04-17 13:44:40

相關問題