对于 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