获取斜杠是一个目录错误,而 运行 在 bash 中回显

Getting slash is a directory error while running echo in bash

每次我的终端加载时,我都试图输出以下 ascii 字符艺术:

   __  __                  _
  / / / /___  ____ _____ _(_)
 / / / / __ \/ __ / /
/ /_/ / / / / /_/ / /_/ / /
\____/_/ /_/\__,_/\__, /_/
                 /____/

所以我在 .bashrc 的末尾添加了以下内容:

echo "   __  __                  _ 
  / / / /___  ____ _____ _(_)
 / / / / __ \/ __ `/ __ `/ / 
/ /_/ / / / / /_/ / /_/ / /  
\____/_/ /_/\__,_/\__, /_/   
                 /____/      "

并打印:

它似乎将 ascii 艺术中的斜杠误解为转义序列,这就是它打印 -bash: /: Is a directory 的原因。我怎样才能摆脱它?如果我向 .bashrc 添加一些简单的内容,例如 echo "Hello World!!",它不会打印此错误消息。

改用单引号:

echo \
'   __  __                  _ 
  / / / /___  ____ _____ _(_)
 / / / / __ \/ __ `/ __ `/ / 
/ /_/ / / / / /_/ / /_/ / /  
\____/_/ /_/\__,_/\__, /_/   
                 /____/      
'

这样试试:

text=(
    '   __  __                  _'
    '  / / / /___  ____ _____ _(_)'
    ' / / / / __ \/ __ `/ __ `/ /'
    '/ /_/ / / / / /_/ / /_/ / /'
    '\____/_/ /_/\__,_/\__, /_/'
    '                 /____/'
)

printf '%s\n' "${text[@]}"

对于 multi-line 文本文字,HereDoc 非常合适:

# Use a quoted heredoc 'marker' to disable expansion of backticks
cat <<'LOGO'
   __  __                  _
  / / / /___  ____ _____ _(_)
 / / / / __ \/ __ `/ __ `/ /
/ /_/ / / / / /_/ / /_/ / /
\____/_/ /_/\__,_/\__, /_/
                 /____/
LOGO

Un-quoted heredoc 标记:

cat <<EOF 
hello `echo world`
EOF

输出:

hello world

引用heredoc 'marker':

cat <<'EOF'
hello `echo world`
EOF

输出:

hello `echo world`