[linux shell]引數傳遞之空格

germany006發表於2013-07-12

轉載地址:


今天下午做實驗資料的自動化時遇到一個很有趣的小問題,與大家分享下:

【背景】

S是一個bash指令碼,P是一個python指令碼,S在指令碼中呼叫了P,並傳遞引數給P

【問題】

現在問題來了,在呼叫S的時候,有一個引數會傳遞給P。當傳遞S的引數是空格時,我們假設空格所在的位置是shell的$1,那麼怎麼把這個空格作為引數傳遞給P呢?

【方法】

1. python p $1

執行時自動略去最後的空格,失敗

2. python p \"$1\"

這樣執行時轉義保證是python p " ",但是在shell中傳參時其實是用空格分割的,所以傳到p中的引數實際變成了[p, " , "]三個,不是空格,失敗

3. python p \\$1

我想的是轉義後變成python p \空格,傳給p再次轉移後就能還原成空格。其實不是,因為分割後認為傳遞的引數只有[p, \\]。看來走轉義的路是行不通的。

4. 

temp = $2

python p ${temp:-空格}

和1實際上是同樣的,失敗

【分析】

shell從外部執行時,對於" "引數可以認為是空格,但是從內部解釋時“ ”就被當成了兩個引數

【解決方案】

子shell:

echo "python p \"$1" >> ~f.tmp

sh ./~f.tmp

將要執行的命令打到臨時檔案,然後作為子shell啟動。

這個方法比較笨。各位如果有哪些比較好的方法,請不吝賜教:D

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-766140/,如需轉載,請註明出處,否則將追究法律責任。

相關文章