以下是显示问题的代码:
#!/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',没有]。
我认为问题出在 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”可以回显“$ 1”。但我觉得这不是最好的事情。
P.S。 我个人认为这非常有趣。感谢您对此的任何想法。
答案 0 :(得分:1)
-e
是echo
某些版本解释的标志。此处的解决方案是不使用echo
,而是使用printf
:
printf '%s' "$1" | 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的详尽讨论,请阅读那里的优秀答案。