问题:执行redi=”> /tmp/saveit”;echo hello $redi命令序列的结果是什么,文件/tem/saveit存在么?试着加上双引号或者单引号能否实现原本重定向的功能,为什么?
-
命令解释:
redi=”> /tmp/saveit”
:这行命令将字符串"> /tmp/saveit"
赋值给变量redi
。注意,这里的>
是作为普通字符存储在变量中,而不是重定向符号。echo hello $redi
:这行命令将会输出hello
后面跟着变量redi
的内容,也就是> /tmp/saveit
。因此,实际输出将是:hello > /tmp/saveit
。
-
文件 /tmp/saveit 是否存在:
- 在执行上述命令后,文件
/tmp/saveit
不会被创建。原因在于重定向符号>
在这个上下文中没有被解析为重定向操作,而只是作为字符串的一部分存在于变量redi
中。因此,echo
命令并没有执行重定向。
- 在执行上述命令后,文件
-
使用引号的效果:
- 如果将
redi
的赋值改为单引号或双引号包裹的字符串,如redi='> /tmp/saveit'
或redi="> /tmp/saveit"
,仍然是将字符"> /tmp/saveit"
存储在变量中。因此:echo hello $redi
仍然会输出hello > /tmp/saveit
。- 文件
/tmp/saveit
仍然不会被创建。
- 如果将
结论
- 在这个上下文中,
>
符号被当作普通字符串处理,而不是作为重定向符号,因此/tmp/saveit
不会被创建。 - 不论是单引号还是双引号,效果都是将
>
当作字符处理,重定向功能无法实现。
如果想要实现重定向
如果你想要在 echo
命令的输出中将内容重定向到 /tmp/saveit
,可以直接写成:
echo hello > /tmp/saveit
或者使用变量的内容进行重定向,例如:
redi="/tmp/saveit"
echo hello > "$redi"
这样才能实现将 echo
的输出重定向到指定文件中。