这是显示问题的代码:
#!/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或在这里阅读一些不错的选择