![如何在linux命令中使用用户定义的变量名?](https://linux22.com/image/165104/%E5%A6%82%E4%BD%95%E5%9C%A8linux%E5%91%BD%E4%BB%A4%E4%B8%AD%E4%BD%BF%E7%94%A8%E7%94%A8%E6%88%B7%E5%AE%9A%E4%B9%89%E7%9A%84%E5%8F%98%E9%87%8F%E5%90%8D%EF%BC%9F.png)
我是编写脚本的新手。我需要编写一个脚本来从服务器下载文件并将其存储在使用 Linux 的日期时间动态定义的目录中。
这是它的样子
dir_path="/Users/me/Downloads/stuff/data_vm/"
pem_path="/Users/me/Downloads/mypem"
现在我定义目录名称
dir_name="backup_$(date +%Y-%m-%d_%H:%M:%S)"
然后我连接dir_path
和dir_name
final_path="${dir_path}${dir_name}"
现在我在此路径上创建目录
mkdir "${final_path}"
现在我在命令中使用上面定义的变量时遇到问题scp
。这就是我所做的
scp -i "${pem_path}" -r [email protected]:/home/ec2-user/stats/dom/files/ "$(final_path)"
它能够创建目录,但我得到command not found
包含命令的行scp
。
我究竟做错了什么?
答案1
你有一个错字:"$(final_path)"
应该是"$final_path"
(或者"${final_path}"
如果你喜欢花括号)。
使用 时"$(final_path)"
,shell 会将其视为final_path
在命令替换中运行的命令(将命令的输出替换为字符串;您可以在date
前面使用它)。您可能会在表单上看到错误
sh: final_path: command not found
另请注意,${variable}
语法仅是真正的必要的当您想要在字符串内使用扩展时$variable
,将其与变量名称中的有效字符连接起来,如"${variable}_"
or中"${variable}hello"
。在所有其他情况下,使用就足够了"$variable"
,但这可能取决于个人习惯。