呼应一个数字?

呼应一个数字?

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

echo 45>target_size

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

x=45;echo $x>target_size

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

答案1

我认为,这取决于 shell 如何解析你的命令。当你这样做时

echo 45>target_size

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

如果你这样做

echo 45 >target_size

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

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

答案2

@steeldriver 的回答是正确的 - 数字和重定向运算符之间的空格很重要。这似乎是一种不一致的行为,因为在我的测试中,echo 45>output.txt在 ksh93 和 dash shell 上将 45 写入文件。

另外,您也可以始终使用带有运算符tee的命令。 here-string<<<

tee  output_file.txt <<< "45"

或者对于那些没有<<<操作符的 shell,echo 45 | tee output_file.txt

相关内容