Bash

呼叫命令,其中一個參數是對文件進行分類的結果

  • August 27, 2022

如何呼叫帶有 on 參數的命令是 cat’ing 文件的結果?


 npx aws-api-gateway-cli-test \
 --username $username \
 --password $password \
 --method $method \
 --body cat user.json | jq      # <--------- how am I supposed to write this?

上面的程式碼片段導致解析錯誤


另一種嘗試:

npx aws-api-gateway-cli-test \
     --username $username \
     --password $password \
     --method $method \
     --body ${cat user.json | jq}

錯誤:替換錯誤


以下作品供參考:

     npx aws-api-gateway-cli-test \
     --username $username \
     --password $password \
     --method $method \
     --body \{\"test\": \"123\"\}
npx aws-api-gateway-cli-test \
     --username "$username" \
     --password "$password" \
     --method "$method" \
     --body "$(cat user.json)"

儘管在 ksh、zsh 或 bash 中,您也可以執行以下操作:

npx aws-api-gateway-cli-test \
     --username "$username" \
     --password "$password" \
     --method "$method" \
     --body "$(<user.json)"

$(cmd...),稱為命令替換擴展為cmd去除尾隨換行符的輸出,並且在bash刪除所有 NUL 字節的情況下。這對於不應包含 NUL 的 JSON 來說很好(並且無論如何外部命令的參數不能包含 NUL)並且包含 JSON 數據中的換行符的尾隨空格並不重要。

命令替換的特定語法來自 80 年代初期的 ksh,並且在 90 年代初期已被 POSIX 標準化,sh因此所有類似 POSIX 的 shell 都支持。

該功能本身起源於 70 年代後期的 Bourne shell,但使用了繁瑣的cmd語法。(t)csh然後也使用該語法。在rc/ esshell 中,語法是cmd`or {more complex cmd}。雖然在 fish 中只是(…),但現在也支持較新的版本$(cmd)`(也可以在雙引號內使用)。

sh-like shell 中,$(cmd), like$username在未引用時和在列表上下文中受 split+glob (僅在 zsh 中拆分)的影響,因此如果您希望將其作為一個參數傳遞,則應將其引用。

有關 的詳細資訊$(<file),請參閱了解 Bash 的讀取文件命令替換

引用自:https://unix.stackexchange.com/questions/715141