[linux shell]引數傳遞之空格
轉載地址:
今天下午做實驗資料的自動化時遇到一個很有趣的小問題,與大家分享下:
【背景】
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Shell學習【引數傳遞】
- Linux/Unix shell 引數傳遞到SQL指令碼LinuxSQL指令碼
- Linux/Unix shell sql 之間傳遞變數LinuxSQL變數
- C#引數傳遞之值引數C#
- go 呼叫 shell 指令碼 如何傳遞引數Go指令碼
- Shell自學二(引數傳遞和陣列)陣列
- shell程式引數傳遞給sqlplusSQL
- SpringMVC之引數傳遞SpringMVC
- linux中main引數傳遞LinuxAI
- 引數傳遞機制之JWTJWT
- linux_shell awk中傳遞變數Linux變數
- JavaScript深入之引數按值傳遞JavaScript
- JavaScript 深入之引數按值傳遞JavaScript
- python函式之引數傳遞Python函式
- Mybatis引數傳遞MyBatis
- JNI傳遞引數
- React事件傳遞引數React事件
- 路由元件傳遞引數路由元件
- JS的方法引數傳遞(按值傳遞)JS
- 請求引數的傳遞
- JavaScript函式傳遞引數JavaScript函式
- out,ref,params引數傳遞
- 函式的引數傳遞函式
- 利用閉包傳遞引數
- java 中引數的傳遞Java
- JavaScript函式引數傳遞JavaScript函式
- 深入學習js之——引數按值傳遞#9JS
- Python3之函式的引數傳遞與引數定義Python函式
- 引數傳遞方式必須是const引用傳遞
- js中函式引數值傳遞和引用傳遞JS函式
- Silverlight之Frame傳遞多個引數並獲取完整引數
- 函式作為引數傳遞函式
- 函式引數傳遞及返回函式
- C++引數的傳遞方式C++
- golang 方法作為引數傳遞Golang
- php連結中加引數傳遞PHP
- OFBiz中的引數傳遞
- 獲取url傳遞傳遞的某個引數的值