我试图-e
在 Bash 4 中分配给一个变量。但该变量仍然为空。
例如:
$ var="-e"
$ echo $var
$ var='-e'
$ echo $var
$ var="-t"
$ echo $var
-t
为什么它可以工作-t
,但不能-e
?
答案1
它可以工作,但除非同时启用和选项,否则运行echo -e
不会在 Bash 中输出任何内容,因为随后将 解释为选项:posix
xpg_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 var
(typeset -p var
在 ksh、zsh 和 yash(以及 bash)中)可用于告知变量的确切类型和内容。
答案2
命令(如您的echo
)采用命令行参数,这些参数可能是标志(-e
在您的情况下)。许多命令(至少是常见的 Linux 版本)将--
(两个连字符)理解为“标志结束,后面的内容都是常规参数”。所以你可以删除一个反常命名-r
的文件rm -- -r
。
对于显示内容printf
来说,它更加强大(如果更难使用)。