【问题标题】:Bash: bad "interpretation" of a string after having read it from user inputBash:从用户输入读取字符串后对字符串的错误“解释”
【发布时间】: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 -cecho $name | od -x。 od 命令以字符 (-c) 或十六进制 (-x) 形式转储文本。然后,您将能够看到那个神秘添加的十六进制代码。
  • 我很确定我没有在中间输入任何内容。我真的不明白问题的原因。您的调试提示的问题在于它是一个“随机”错误。
  • 即使从触发问题 (Max Aspir) 的 shell 复制和粘贴旧输入也不会再触发相同的问题(即'Max As�pir')。
  • 引用:“要删除所有不可打印的字符,您可以通过管道传递它 tr -cd '[:print:]' " (source) 可能对您有所帮助
  • 看看这个网站:utf8-chartable.de/… 你会看到\\xC3 用于指定 unicode 字符,主要用于字母上的重音符号。可能您的键盘上锁定了某些功能键?

标签: bash


【解决方案1】:

这可能是您的环境中的错误或键盘的硬件问题,产生了这个随机字符。有同事碰到过类似的键盘问题,导致他接触的源文件无法编译。

如果您再次遇到此问题,请尝试捕捉或准确识别插入的字符,因为这可以提供一些线索。

除了这个猜测之外,我认为如果没有更多细节,这个问题是不可能解决的。

我不能预先制作这个,例如西里尔文输入

$ bash zz 
Enter your name
яшфяшф
foo.hello('яшфяшф')
яшфяшф

脚本:

echo "Enter your name"
read name
echo "foo.hello('$name')"
python -c "print('$name')"

【讨论】:

    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多