在 bash ( \\bash --noprofile --norc
) 中,当脱字符/回车/光标 ( |
) 位于单词 ( ) 中间时l|!@#asdf
,您可以双击 Tab 以显示ls
脱字符 ( ) 之前单词的建议(对于本例)l
。但在 zsh ( \\zsh -f
) 中它根本不起作用 \xe2\x80\x94 你必须在插入符号之后有一个空格才能自动完成插入符号 ( l| !@#asdf
) 之前的单词。
这是 bash 更擅长的几件事之一。谁能告诉我 zsh 中是否有启用此功能的设置?
\n我正在编写键盘映射脚本(将按键从一种语言键盘布局映射到另一种语言键盘布局)。经过大量努力让一切正常工作后,我发现不同的字符在所有程序(perl、python)中的处理方式不同。然后我在终端(kitty、gnome-terminal \xe2\x80\x94 没关系)中运行一个简单的测试脚本(现已简化):
\npython -c \'import sys;print(len(sys.argv[1]))\' \xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88\n
Run Code Online (Sandbox Code Playgroud)\n并得到了预期的结果:
\n3\n
Run Code Online (Sandbox Code Playgroud)\n但是如果我在 sh/bash (unix&utf-8) 文件中运行它:
\n3\n
Run Code Online (Sandbox Code Playgroud)\n我得到(./test.sh
):
9\n
Run Code Online (Sandbox Code Playgroud)\n这就是所有这些编码/解码/升级/降级 UTF-8 内容在 Perl 中不起作用的原因(如果我从终端手动运行该命令,它可能会在没有所有这些附加编码功能的情况下工作)。
\n现在我有一个问题:为什么完全相同的命令根据执行环境(终端模拟器与 shell 脚本)给出不同的结果?我怎样才能解决这个问题?
\n更新:
\n我忘记了我的:
\n#!/usr/bin/env bash\n# or\n#!/bin/sh\npython -c \'import sys;print(len(sys.argv[1]))\' \xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88\n
Run Code Online (Sandbox Code Playgroud)\n因此,对于 Python,python3
显式运行使得在这两种情况下一切都一样。但另一方面,对于 Perl:
9\n
Run Code Online (Sandbox Code Playgroud)\n其工作原理相同,但在两种情况下都会输出9
. Perl 没有不同的版本,我的版本是 5.30.0(两种情况下打印的版本完全相同)。我是否必须在 Perl 本身中添加一些代码才能使其像 Python3 一样工作(1 个 Unicode 字符的长度是 1 而不是 1-3 个字节)?