回显一个数字?

Zep*_*hyr 6 command-line bash

对于 sysfs 中的文件,我尝试使用

echo 45>target_size
Run Code Online (Sandbox Code Playgroud)

将该值设置为 45。此操作失败,输入无效。但是,如果我这样做:

x=45;echo $x>target_size
Run Code Online (Sandbox Code Playgroud)

它工作正常。此外,如果我使用一个非常大的数字,它会给我一个关于文件编号无效的错误。显然,当您回显一个直数时,终端会将其解释为文件描述符,而不是文字数字。回显数字的正确方法是什么?

ste*_*ver 20

我认为这是 shell 如何解析您的命令的问题。当你做

echo 45>target_size
Run Code Online (Sandbox Code Playgroud)

shell 将文件描述符重定向45到文件target_size,然后echo不带参数执行。

如果你这样做

echo 45 >target_size
Run Code Online (Sandbox Code Playgroud)

它将标准输出描述符重定向到文件target_size,然后执行echo 45.

TL;DR 在重定向运算符之前添加空格。

  • 是的,完全正确。值得注意的是,这似乎是特定于 bash 的。`ksh` 和 `dash` 都将数字回显到文件中,没有问题 (2认同)
  • 不是那么古怪:shell 对空格非常敏感。空格用于分隔命令/关键字/参数。您需要在 `[[ ]]` 中使用空格来分隔运算符/操作数 (2认同)