呼应 Bash 中的回声论点



这是显示问题的代码:

#!/bin/bash
function char() {
local char="$(echo $1 | cut -c2)"    # Gets second character from argument.
echo $char
}
char -a                                  # Outputs 'a'.
char -e                                  # Or 'char -n' outputs nothing.

我希望这段代码输出 [ 'a', 'e' ] 而不是 [ 'a',什么都没有]。

我认为问题出在1 美元。我的问题与此类似。但似乎大多数解决方案都不适合我。我认为 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'.

只有有效的小"黑客"是回声"1美元"。但我有一种感觉,这不是最好的做法。

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

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

printf '%s' "$1" | cut -c2

help echo在bash:

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使反斜杠表示转义序列。

有关为什么printf比echo更好的彻底讨论,请阅读那里的出色答案。

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

最新更新