在Bash中回应echo参数

时间:2017-08-08 10:57:34

标签: string bash unix echo bash4

以下是显示问题的代码:

#!/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。 我个人认为这非常有趣。感谢您对此的任何想法。

1 个答案:

答案 0 :(得分:1)

-eecho某些版本解释的标志。此处的解决方案是不使用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的详尽讨论,请阅读那里的优秀答案。

如果您在此处尝试处理命令行选项,您可能会考虑其他方法。喜欢getopts或阅读here关于一些很棒的选项