代码之家  ›  专栏  ›  技术社区  ›  Tom Hale

安静​​`bash:${PS1@P}:替换错误`message

  •  2
  • Tom Hale  · 技术社区  · 6 年前

    在旧版本的bash上,一些变量/参数扩展不存在。

    例如,将变量扩展为提示字符串:

    echo ${PS1@P}
    

    在旧版本的bash上,即使我这样做了:

    $ echo "${PS1@P}" &> /dev/null
    

    我仍然看到:

    bash: ${PS1@P}: bad substitution
    

    注意,STDOUT和STDERR都在上面被重定向了。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Tom Hale    6 年前

    使用时重定向STDERR有效 eval :

    eval 'str="${PS1@P}";' 2>/dev/null || echo fail
    

    在这一点上,要么你会看到 fail 或者变量 $str

    笔记:

    @Charles Duffy 在评论中指出,围绕在 { } 失败 在里面 bash 4.3.48

    另一种选择是使用子shell。