在 Bash 中回显一个 echo 参数

Echoing an echo argument in Bash

这是显示问题的代码:

#!/bin/bash

function char() {
    local char="$(echo  | cut -c2)"    # Gets second character from argument.
    echo $char
}

char -a                                  # Outputs 'a'.
char -e                                  # Or 'char -n' outputs nothing.

我希望此代码输出 [ 'a', 'e' ] 而不是 [ 'a', nothing ]。

我认为问题出在echo $1。我的问题有点类似于这个one。但似乎大多数解决方案都不适合我。我认为 Bash 改变了它在那个问题中版本的行为:'3.00.15(1)-release (x86_64-redhat-linux-gnu)'.

我的 Bash 版本是“4.3.30(1)-release (i586-pc-linux-gnu)”。我试过:

echo x-e                                 # Outputs 'x-e'.
echo -- -e                               # Outputs '-- -e'.
echo "-e "                               # Outputs '-e'.

只有很少的 "hack" 有效 echo "$1 "。但我觉得这不是最好的做法。

P.S。 我个人觉得这很有趣。感谢您对此的任何想法。

-eecho 解释的某些版本的标志。这里的解决方案是不要使用 echo,而是使用 printf:

printf '%s' "" | cut -c2

来自 bash 中的 help echo

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

所以当变量扩展并且您尝试 运行 echo -e 它不会回显字符串 -e 它告诉 echo 让反斜杠表示转义序列.

要深入讨论 Why printf is better than echo,请阅读那里的优秀答案。

如果您尝试在此处处理命令行选项,则可以考虑其他方法。喜欢 getopts or reading here 一些不错的选择