讓我們假設這是字串:
'a',"b"
它包含單引號和雙引號。
如何將其作為單一字串傳遞給 bash 腳本?
這是 bash 腳本:
#!/bin/bash
echo $1
它必須迴響
'a',"b"
但我們不能假設字串這麼小。最終我計劃發送整個
/etc/httpd/conf/httpd.conf
作為此 bash 腳本的字串。
所以我無法真正一次轉義引號和單引號。
答案1
您可以使用命令替換:
oo.sh "$(cat /etc/httpd/conf/httpd.conf)"
這將運行cat /etc/httpd/conf/httpd.conf
並將輸出(文件的內容)放入給定的第一個參數中oo.sh
。它被引用,因此它作為單一參數傳遞 - 空格和特殊字元不受影響地傳遞。oo.sh
得到一個參數。
但更廣泛地說,如果可能的話,最好將檔案名稱傳遞到腳本中,或將檔案內容作為標準輸入 ( oo.sh < /etc/httpd/conf/httpd.conf
)。除了更標準之外,所有命令列參數加在一起還有一個最大長度,並且檔案可能比這個長度長。即使它現在可以工作,如果該檔案隨著時間的推移可能會變得更大,最終將整個檔案作為參數傳遞將停止工作,並出現錯誤「arg list too long」。
您可以使用 找到該限制getconf ARG_MAX
。大小差異很大:我的系統有 2MB 限制和 256KB 限制。如果您的文件總是很小,您不必擔心,但否則您應該嘗試另一種方法將資料放入腳本中。