bourne shell 中的單引號和變數

bourne shell 中的單引號和變數

我正在嘗試在 Solaris 9 的 bourne shell 中執行此命令。

find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}

我的問題是,該變數${PARSEDATA}無法正常工作,我嘗試在它周圍使用雙引號,那麼問題是$0執行此程式碼的腳本的名稱,而不是使用命令找到的檔案的名稱find

任何解決這個問題的建議(可能是簡單的問題)都會非常有幫助。

提前致謝。

更新: $0是使用指令定位的腳本的名稱find,變數 for${PARSEDATA}是一個篩選器,位於系統上的某個位置,用於修改每個定位腳本的輸出。然而,問題是,我似乎無法同時獲得$0${PARSEDATA}正確擴展,要么$0使用單引號擴展良好,要么使用雙引號${PARSEDATA}擴展良好,但隨後$0成為運行此命令的原始腳本的名稱find

答案1

我不確定你想做什麼?但是,如果您想尋找名為 check_* 的腳本,然後運行它並透過程式 ${PARSE_DATA} 透過管道傳輸它,那麼我猜 find 找到的檔案不是$0但是{}

例子

尋找 /var/ftp/mp3 -name "*.mp3" -type f -exec chmod 644 {} \; (維基百科)

所以我認為你可以使用雙引號:

find ${DATADIR} -name "check_*" -type f -exec sh -c '{} | ${PARSEDATA}' \; >> ${TMP_1}

我已經嘗試成功:

PG='sed s/Blah/Bleh/'
find . -name "check_*" -type f -exec sh -c "{} | $PG" \;

> Bleh Blah

答案2

保留單引號,問題很可能是您尚未匯出 PARSEDATA 變數。

export PARSEDATA
find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}

答案3

如果您希望 shell 不擴展 $0 (使用單引號)並擴展 ${PARSEDATA} ,那麼為什麼不為每個擴展使用不同的引號:

find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | '"${PARSEDATA}" {} \; >> ${TMP_1}

只要您保持引用部分的連接,shell 就會展開 ${PARSEDATA} 並將整個命令作為單一標記傳遞以進行查找。

相關內容