如何在 bash 中将“-e”分配给变量

如何在 bash 中将“-e”分配给变量

我试图-e在 Bash 4 中分配给一个变量。但该变量仍然为空。

例如:

$ var="-e" 
$ echo $var

$ var='-e' 
$ echo $var

$ var="-t" 
$ echo $var
-t

为什么它可以工作-t,但不能-e

答案1

它可以工作,但除非同时启用和选项,否则运行echo -e不会在 Bash 中输出任何内容,因为随后将 解释为选项:posixxpg_echo-e

$ help echo
echo: echo [-neE] [arg ...]
    Write arguments to the standard output.

    Display the ARGs, separated by a single space character and followed by a
    newline, on the standard output.

    Options:
      -n        do not append a newline
      -e        enable interpretation of the following backslash escapes
      -E        explicitly suppress interpretation of backslash escapes

使用

printf "%s\n" "$var"

反而。

正如 cas 在评论中指出的那样,Bash declare -p vartypeset -p var在 ksh、zsh 和 yash(以及 bash)中)可用于告知变量的确切类型和内容。

看:为什么 printf 比 echo 更好?

答案2

命令(如您的echo)采用命令行参数,这些参数可能是标志(-e在您的情况下)。许多命令(至少是常见的 Linux 版本)将--(两个连字符)理解为“标志结束,后面的内容都是常规参数”。所以你可以删除一个反常命名-r的文件rm -- -r

对于显示内容printf来说,它更加强大(如果更难使用)。

相关内容