[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中main引數傳遞LinuxAI
- go 呼叫 shell 指令碼 如何傳遞引數Go指令碼
- Shell自學二(引數傳遞和陣列)陣列
- shell (3)指令碼引數傳遞與數學運算指令碼
- 引數傳遞機制之JWTJWT
- JAVA基礎之-引數傳遞Java
- 引數傳遞
- Mybatis引數傳遞MyBatis
- linux shell特殊引數Linux
- React事件傳遞引數React事件
- 路由元件傳遞引數路由元件
- JS的方法引數傳遞(按值傳遞)JS
- Python3之函式的引數傳遞與引數定義Python函式
- 引數傳遞方式必須是const引用傳遞
- 引數的定義和引數的傳遞
- 利用閉包傳遞引數
- JavaScript函式傳遞引數JavaScript函式
- out,ref,params引數傳遞
- 請求引數的傳遞
- 函式的引數傳遞函式
- t-on-click 傳遞引數
- 深入學習js之——引數按值傳遞#9JS
- Linux之shell變數Linux變數
- SpringBoot系列Mybatis之引數傳遞的幾種姿勢Spring BootMyBatis
- 函式作為引數傳遞函式
- C++引數的傳遞方式C++
- [Python] 傳遞引數前面的*或**Python
- 函式引數傳遞及返回函式
- Python怎麼傳遞不定引數Python
- Java方法04:命令列傳遞引數、可變引數Java命令列
- Python的函式引數傳遞:傳值?引用?Python函式
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- 帶你深入理解傳遞引數
- GridView傳遞兩個引數的方法View
- apicloud拉起小程式並傳遞引數APICloud
- java 傳遞引數的兩種方式Java
- [ASP.NET] 使用Request 傳遞引數ASP.NET
- JavaScript 獲取 url 傳遞引數值JavaScript