Bash

<< 和 >> 在 bash 中與 - 一起使用時的區別

  • July 12, 2022

它可能有點具體,就像我在查看 rpm 包的腳本時遇到的那樣。最初的包裹有:

rpm --import - &lt;&lt; EOF
GPG
KEY
HERE
EOF

這失敗並出現以下錯誤:-:導入讀取失敗(0)。

軟體包已修改,現在安裝時沒有以下問題:

echo "GPG
KEY
HERE" &gt;&gt; rpm --import -

我不明白為什麼第一個失敗而不是第二個。另外,有沒有可能

echo "GPG
KEY
HERE" | rpm --import -

作為一種選擇?

提前謝謝了!

您的第一個範例將實例之間的文本EOF視為具有變數插值的雙引號字元串(即,以成對反引號開頭$或以成對反引號開頭的所有變數、命令和表達式都被評估和擴展)。這作為標準輸入提供給rpm命令。

您的第二個實例附加了這三行(也帶有變數插值):

GPG
KEY
HERE --import -

rpm目前目錄中的文件。請特別注意它不執行rpm命令

您的第三個選項寫入三行(再次使用變數插值):

GPG
KEY
HERE

作為命令的標準輸入rpm --import -

在所有情況下,您都可以通過在字元串周圍使用單引號而不是 ndouble 引號或不使用(在第一種情況下,您會使用&lt;&lt;'EOF')來防止變數的擴展和插值。

另請注意,它似乎rpm不用-作從stdin讀取的標記,因此沒有一個選項可以滿足您的需求。您將需要將 GPG 密鑰寫入文件或使用&lt;( echo... )構造代替-.

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