Bash 腳本:將變數傳遞給包含引號、單引號的 bash 腳本。等等

Bash 腳本:將變數傳遞給包含引號、單引號的 bash 腳本。等等

讓我們假設這是字串:

   '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 限制。如果您的文件總是很小,您不必擔心,但否則您應該嘗試另一種方法將資料放入腳本中。

相關內容