在 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。
我个人觉得这很有趣。感谢您对此的任何想法。
-e
是 echo
解释的某些版本的标志。这里的解决方案是不要使用 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 一些不错的选择
这是显示问题的代码:
#!/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。 我个人觉得这很有趣。感谢您对此的任何想法。
-e
是 echo
解释的某些版本的标志。这里的解决方案是不要使用 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 一些不错的选择