如何在linux命令中使用用户定义的变量名?

如何在linux命令中使用用户定义的变量名?

我是编写脚本的新手。我需要编写一个脚本来从服务器下载文件并将其存储在使用 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_pathdir_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",但这可能取决于个人习惯。

相关内容