【发布时间】:2018-05-20 10:11:45
【问题描述】:
我不知道我遇到的问题是否实际上是一个糟糕的“解释”,但我认为我的 bash 脚本做错了。
我有下面的 bash 脚本:
echo "Enter your name"
read name
#debug
echo "foo.hello('$name')"
python -c "import foo; foo.hello('$name')"
它读取一个字符串(带空格),然后将字符串传递给 Python 函数。它几乎每次都有效。
有时,它会发生一些奇怪的事情。例如,
$ Enter your name
Max Aspir
foo.hello('Max As�pir')
's' 和 'p' 之间似乎有新字符,这使得 python 脚本失败。
令人惊讶的是,如果我尝试重现错误,它不会发生。我不明白为什么(i)它确实发生了,(ii)为什么它不是每次都发生。
有办法解决吗?
【问题讨论】:
-
你确定你没有在 s 和 p 之间按下另一个键吗?像口音或特殊字符?要调试,您可以使用
echo $name | od -c和echo $name | od -x。 od 命令以字符 (-c) 或十六进制 (-x) 形式转储文本。然后,您将能够看到那个神秘添加的十六进制代码。 -
我很确定我没有在中间输入任何内容。我真的不明白问题的原因。您的调试提示的问题在于它是一个“随机”错误。
-
即使从触发问题 (
Max Aspir) 的 shell 复制和粘贴旧输入也不会再触发相同的问题(即'Max As�pir')。 -
引用:“要删除所有不可打印的字符,您可以通过管道传递它
tr -cd '[:print:]'" (source) 可能对您有所帮助 -
看看这个网站:utf8-chartable.de/… 你会看到
\\xC3用于指定 unicode 字符,主要用于字母上的重音符号。可能您的键盘上锁定了某些功能键?
标签: bash