Bash

如何輸出包含斜杠和其他特殊字元的多行字元串?

  • November 29, 2021

我想在我的 bash 腳本完成後輸出這個。

/\_/\
( o.o )
> ^ <

我嘗試了以下但所有返回錯誤。

echo /\\_/\\\n\( o.o \)\n > ^ <
echo  \/\\_\/\\\r\n( o.o )\r\n > ^ <
echo /\\_/\\\n\( o.o \)\n \> ^ <

如何轉義這些字元,以便 bash 將它們呈現為字元串?

在這種情況下,我將使用cat(引用的)here-document:

cat <<'END_CAT'
/\_/\
( o.o )
> ^ <
END_CAT

這是確保 ASCII 藝術按預期方式輸出的最佳方式,而不會讓 shell “妨礙”(擴展變數等,解釋反斜杠轉義序列,或執行重定向、管道等)

您還可以使用多行字元串printf

printf '%s\n' ' /\_/\
( o.o )
> ^ <'

請注意在我們要輸出的靜態字元串周圍使用單引號。我們使用單引號來確保 ASCII 藝術不會被 shell 以任何方式解釋。請注意,我們輸出的字元串是printf. 的第一個參數printf始終是單引號格式字元串,其中反斜杠遠非無效。

或多個字元串printf(每行一個):

printf '%s\n' ' /\_/\' '( o.o )' ' > ^ <'
printf '%s\n' \
' /\_/\' \
'( o.o )' \
' > ^ <'

或者,使用echo(但請參閱為什麼 printf 比 echo 更好?;基本上,根據 shell 及其目前設置,某些轉義序列可能存在問題,這些問題可能無法與 ASCII 繪圖配合使用),

echo ' /\_/\
( o.o )
> ^ <'

但同樣,cat我認為僅從此處的文件中輸出它是最方便和直接的。

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