Shell-Script
echo $‘hinhi’ > /etc/list.list 不工作
當我
echo $’hi\nhi’ > /etc/list.list
在 Kali Linux 2020.4 Live USB 上創建的包含多個命令的可執行腳本文本文件中使用它時:
- 包括
$
在文件文本中,同時消失 2 個’’
符號。- 無法創建新行,將 2
hi
彼此分開,而只是顯示\n
完全沒有分隔。但是當我在執行檔之外或在普通終端中使用相同的命令時,它可以工作。
Kali 2020.4 是否從 2020.3 更改為不允許我在可執行文本文件中使用的回顯格式,因為它曾經完美地工作?我可以使用其他一些命令來
echo
在 1 行命令中創建一個新行嗎?
你的命令有很多問題,幸運的是它們都很容易解決:
- 正如Quasimodo在他們的評論中提到的那樣,
’
它不是在Bourne Again Shell(又名“BASH”,Kali Linux 上的預設 shell 解釋器)中分隔字元串的有效字元。'
將需要用單引號 ( ) 或雙引號 ( )替換它"
。以下是有關在 BASH中引用的一些重要資訊。- 您正在嘗試在命令中使用“轉義序列”
echo
,但沒有提供-e
標誌。- 基於您不希望
$
在輸出中使用美元符號($$ ANSI Quoted String $$ (https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html).
根據 ANSI 引用的 GNU BASH 文件:
$‘string’ 形式的單詞被特殊處理。該單詞擴展為字元串,並按照 ANSI C 標準的規定替換反斜杠轉義字元。反斜杠轉義序列(如果存在)被解碼
對轉義序列的理解是這個答案的重要區別。可以選擇外殼擴展發生的位置:在執行階段
echo
或在使用 ANSI 引用。之所以做出這種區分,是因為在某些情況下,必須在外部進行指定這些類型的擴展才能echo
產生預期的效果。在進一步考慮之後,我回憶起awk
一個工具,我看到這個問題出現了:一般來說,我還會查看 BASH Hackers wiki 的“新手陷阱 - 變數”部分,特別是關於“設置變數”和“擴展(使用)變數”的小節。
這些是 BASH 本身的基本語法問題,不會受到 Kali 次要版本更新的影響。
編輯:添加了 3a/3b 的細目以包括來自steeldriver評論的資訊。