背景:在默認用戶沒有 sudo 權限的 pod 內測驗 bash 腳本,這樣用戶就不能使用 vim 或 nano 創建.sh檔案,所以我必須找到使用cat << EOF >> test.sh. 我正在做一些本地測驗,以確保它首先正常作業。在本地,我正在test.sh使用 nano 創建一個檔案。見下文
#!/bin/bash
# test.sh
VAR="Test"
echo $VAR
當我貓它時:
#!/bin/bash
# test.sh
VAR="Test"
echo $VAR%
我保存test.sh,使其可執行chmod x test.sh并使用./test.sh輸出運行它:
Test
現在,當我嘗試在 bash heredoc 中模仿相同的行為時,這是我使用的命令:
cat <<EOF >> test.sh
#!/bin/bash
# test.sh
VAR="Test"
echo $VAR
EOF
我保存了它并使它也可執行。貓的輸出是:
#!/bin/bash
# test.sh
VAR="Test"
echo
所以顯然運行它是行不通的。輸出空。我認為我面臨的問題是環境變數$VAR未使用 heredoc 在子shell 內正確定義。
uj5u.com熱心網友回復:
當你寫這個:
cat <<EOF >> test.sh
#!/bin/bash
# test.sh
VAR="Test"
echo $VAR
EOF
...由您當前的外殼$VAR擴展(就像撰寫類似的東西)。如果您想在 heredoc 中抑制變數擴展,可以參考它(注意 周圍的引號):echo "$VAR"'EOF'
cat <<'EOF' >> test.sh
#!/bin/bash
# test.sh
VAR="Test"
echo $VAR
EOF
這就像單引號 ( echo '$VAR') 一樣禁止變數擴展。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524692.html
標籤:linux重击壳异端
上一篇:C 在命令列中讀取“輸入”
