Shell-Script

echo $‘hinhi’ > /etc/list.list 不工作

  • February 23, 2021

當我echo $’hi\nhi’ > /etc/list.list在 Kali Linux 2020.4 Live USB 上創建的包含多個命令的可執行腳本文本文件中使用它時:

  1. 包括$在文件文本中,同時消失 2 個’’符號。
  2. 無法創建新行,將 2hi彼此分開,而只是顯示\n完全沒有分隔。

但是當我在執行檔之外或在普通終端中使用相同的命令時,它可以工作。

Kali 2020.4 是否從 2020.3 更改為不允許我在可執行文本文件中使用的回顯格式,因為它曾經完美地工作?我可以使用其他一些命令來echo在 1 行命令中創建一個新行嗎?

你的命令有很多問題,幸運的是它們都很容易解決:

  1. 正如Quasimodo在他們的評論中提到的那樣,它不是在Bourne Again Shell(又名“BASH”,Kali Linux 上的預設 shell 解釋器)中分隔字元串的有效字元。'將需要用單引號 ( ) 或雙引號 ( )替換它"以下是有關在 BASH中引用的一些重要資訊。
  2. 您正在嘗試在命令中使用“轉義序列echo,但沒有提供-e標誌。
  3. 基於您希望$在輸出中使用美元符號(

$$ 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評論的資訊。

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