2011-08-08 32 views
0

我需要接收參數我沒有控制權成shell腳本,並保留任何單或雙引號的能力。例如,一個腳本,簡單地輸出給定的參數應該如下行動:如何保存在shell腳本參數的單引號和雙引號而不會控制他們如何通過

> my_script.sh "double" 'single' none 
"double" 'single' none 

我沒有充實的論據,如特權:

> my_script.sh \"double\" \'single\' none 

> my_script.sh '"double"' "'single'" none 

而且,無論是 「$ @」,也不是 「$ *」 的工作。 我也想過從STDIN讀取和嘗試類似:

> echo "double" 'single' none | my_script.sh 

想它可以幫助,但沒有突破爲止。

有什麼建議嗎?

CSH/PERL解決方案的歡迎。

+0

見我的回答 http://stackoverflow.com/questions/3755772/how-to-preserve-double-引用功能於IN-A-shell腳本 這裏 http://stackoverflow.com/a/26733366/2668213 –

回答

3

這是不可能的(不逃逸),因爲shell處理參數和腳本調用之前刪除引號。因此,您的腳本不知道命令行中指定的引號。

0

不能恢復單/雙引號正是因爲他們,因爲shell「吃」他們。如果您需要從腳本中調用其他腳本,則可以再次引用論據。這裏是一個Perl解決方案,我用:

sub args2shell 
{ 
    local (@argv) = @_; 
    local $" = '\' \''; 
    local (@margv); 

    @margv = map { s/'/'\\''/g; $_ } @argv; 
    return "\'@margv\'" if @margv; 
    return undef; 
} 

用法示例:

$args = args2shell @ARGV; 
open F, "find -follow $args ! -type d |"; 
... 
相關問題