Bash
呼叫命令,其中一個參數是對文件進行分類的結果
如何呼叫帶有 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
/es
shell 中,語法是cmd`or
{more complex cmd}。雖然在 fish 中只是
(…),但現在也支持較新的版本
$(cmd)`(也可以在雙引號內使用)。在
sh
-like shell 中,$(cmd)
, like$username
在未引用時和在列表上下文中受 split+glob (僅在 zsh 中拆分)的影響,因此如果您希望將其作為一個參數傳遞,則應將其引用。有關 的詳細資訊
$(<file)
,請參閱了解 Bash 的讀取文件命令替換