小编And*_*asT的帖子

BASH中变量替换和CJK字符之间的冲突

我在 BASH shell 中遇到了变量替换的问题。
假设您定义了一个变量a。然后命令

    $> echo ${a//[0-4]/}
Run Code Online (Sandbox Code Playgroud)

打印其值,并删除所有介于 0 和 4 之间的数字:

    $> a="Hello1265-3World"
    $> echo ${a//[0-4]/}
    Hello65-World
Run Code Online (Sandbox Code Playgroud)

这似乎工作得很好,但让我们看看下一个例子:

    $> b="?1265-3?"
    $> echo ${b//[0-4]/}
    ?1265-3?
Run Code Online (Sandbox Code Playgroud)

没有发生替换:我认为这是因为b包含 CJK 字符。这个问题扩展到所有涉及方括号的情况。令人惊讶的是,没有方括号的变量替换在两种情况下都可以正常工作:

    $> a="Hello1265-3World"
    $> echo ${a//2/}
    Hello165-3World
    $> b="?1265-3?"
    $> echo ${b//2/}
    ?165-3?
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是我错过了什么?

我使用 Lubuntu 12.04,终端是lxterminalecho $BASH_VERSION返回 4.2.24(1)-release。

编辑: 安德鲁约翰逊在他的评论中表示,使用gnome-terminal4.2.37(1)-release 命令可以正常工作。我想知道这是否是lxterminal其特定的 4.2.24(1)-release 版本的问题。

编辑:gnome-terminal在 Lubuntu 12.04 上尝试过,但问题仍然存在......

bash lubuntu utf-8 lxterminal

7
推荐指数
1
解决办法
379
查看次数

在 bash 终端中保存更多 corsor 位置(使用 tput?)

我知道这会tput sc保存当前的光标位置并tput rc准确地将其恢复到tput sc被调用的位置。问题是每次tput sc调用时,它都会覆盖之前保存的位置。

有没有一种方法,以节省更多的位置,例如tput sc pos1并且tput sc pos2可与,比如说可以恢复,tput rc pos1tput rc pos2分别?(解决方案不需要使用tput,我提到它是因为它是我知道的唯一处理光标位置的命令)

如果没有,有没有办法至少在函数中本地保存光标位置,以便如果一个函数使用tput sc然后调用另一个再次运行的函数tput sc,那么每个函数在调用时都会恢复自己保存的光标位置tput rc

提前致谢。

command-line bash cursor

5
推荐指数
2
解决办法
5149
查看次数

标签 统计

bash ×2

command-line ×1

cursor ×1

lubuntu ×1

lxterminal ×1

utf-8 ×1