我可以在bash中的文件路径中使用变量吗?如果是这样,怎么样?

时间:2016-02-22 23:51:24

标签: bash filepath

我尝试编写一个小的shell脚本来查找目录中最近添加的文件,然后将该文件移动到其他位置。如果我使用:

ls -t ~/directory | head -1

然后将其存储在变量VARIABLE_NAME中,为什么我不能通过以下方式将其移到〜/ otherdirectory:

mv ~/directory/$VARIABLE_NAME ~/otherdirectory

我在这里搜索过谷歌搜索,但似乎没有关于在文件路径中使用变量的任何信息?有更好的方法吗?

编辑:这是脚本的一部分:

ls -t ~/downloads | head -1
read diags
mv ~/downloads/$diags ~/desktop/testfolder

2 个答案:

答案 0 :(得分:8)

您可以在脚本中执行以下操作:

diags=$(ls -t ~/downloads | head -1)
mv ~/downloads/"$diags" ~/desktop/testfolder

在这种情况下,diags的值为ls -t ~/downloads | head -1,可由mv调用。

答案 1 :(得分:0)

以下命令

ls -t ~/downloads | head -1
read diags

可能不是你想要的:read命令之前没有从命令接收输入。相反,它等待stdin的输入,这就是你认为脚本“挂起”的原因。也许你想做以下事情(至少这是我提供更好解决方案的第一次错误尝试):

ls -t ~/downloads | head -1 | read diags

然而,这将(如alvits所述)也不起作用,因为管道的每个元素都作为单独的命令运行:因此变量diags不是父shell的一部分,而是子进程的一部分。

因此,正确的解决方案是:

diags=$(ls -t ~/downloads | head -1)

然而,还有一些问题会导致后续的mv命令失败:

  • 目录可能为空。
  • 文件名可能包含空格,换行符等。