2016-06-11 104 views
1

shell命令cmd可能包含空格以及單引號和雙引號。如何在命令參數中將引號轉義爲sh -c?

如何逃避這些引號命令正確地傳遞給了POSIX shell:

>dash -c ' CMD '

另一個問題指出作爲DUP,詢問雙引號。其中一個答案可能會起作用 - 拆分命令並使用連接的引號。例如,如果CMD是

cd "dir"; ls 'foobar' 

那麼我們就變換成

>dash -c 'cd "dir"; ls '"'foobar'" 

這是凌亂...有沒有更簡單的方法?

添加:它似乎沒有人理解我...我只是想要一個通用的過程,一個算法,接受輸入,一個字符串(完全精確的,由可打印的ASCII字符從0到127 ASCII表),並輸出第二個字符串。要求是,如果第一個字符串這樣

POSIX_shell>string1 

執行的結果是一樣的

>POSIX_shell -c string2 

難道我更清楚現在,請讓我知道。

回答

1

首先,儘量避免你提到的雜亂的東西。如果你必須保持簡單,單引號內的所有雙引號都沒有問題。雙引號內的所有單引號都不成問題。

#Example: 
echo '"These are double quoted"' 
echo "'These are single quoted'" 

三(混亂和避免這種可能的話),你想要一個單引號內的任何單引號,必須使用多個報價進行轉義。

echo ''"'"'These are all single quoted, but messy'"'"'' 

四,雙引號內使用雙引號應該使用反斜槓\

echo "\"These are double quoted\"" 
+0

的評論:「如果有可能避免這種」讓我想起了經典笑話來逃脫「客戶電話支持工程師和說,當我這樣做時,我遇到了一個錯誤,支持工程師說,不要那麼做!「 –

+0

我不明白你的答案。你確定你明白我的問題嗎? –

+1

你可以在單引號內回顯'''',除了它是一個fib - 最終結果是單引號,但在''''中,第一個單引號終止單引號字符串,'\''嵌入單引號,最後'''恢復單引號字符串。 –

相關問題