beard black Asked: 2020-02-21 03:24:40 +0800 CST2020-02-21 03:24:40 +0800 CST 2020-02-21 03:24:40 +0800 CST echo 命令,需要替换 772 我编写了一个备份日志脚本并在 echo 中有 2 个变量,但仍然无法正常工作。 我的命令: echo " DB-Size $(du -hs /backup/db/db_$(date +%F).sql " >> /backup/backup.log 在我的 echo 语句中,我有命令变量,在命令变量中有另一个变量。我需要改变什么。对于每一个帮助,我很感激。 亲切的问候 黑胡子 linux scripting ubuntu bash shell 2 个回答 Voted Best Answer Phill W. 2020-02-21T07:27:52+08:002020-02-21T07:27:52+08:00 在 echo 中有 2 个变量 事实上,你没有。 变量用花括号括起来: NAME=Fred echo ${NAME}" 你所拥有的是命令调用。"$(" 和 ")" 分隔符内的所有内容都作为单独的命令执行,并且该命令的输出作为调用的结果“返回”: echo "$( pwd )" 我认为您的意图是根据当前日期创建文件路径,然后将该文件路径输入 du 命令。所以,一步一步: 你的文件路径是: /backup/db/db_$(date +%F).sql 这个生成的值中不能有任何空格(%F 返回 YYYY-MM-DD),所以我们不必担心引用文件路径。 将其“插入”到 du 调用中: du -hs /backup/db/db_$(date +%F).sql 最后,在“顶级”回显命令中调用它: echo "DB-Size $(du -hs /backup/db/db_$(date +%F).sql)" >> /backup/backup.log 注意大括号的位置——“$(”开始调用,“)”结束。您正在调用两个命令,因此您需要两个结束的 ')'。 另请注意,引号较少 - 一个用于开始字符串值,另一个用于结束它。因为它们是双引号,shell 将扩展其中的所有位,包括变量和命令调用 - 如果它们是单引号,它不会这样做,将整个事物视为字符串文字。 beard black 2020-02-21T04:27:15+08:002020-02-21T04:27:15+08:00 echo " DB-Size "$(du -hs /backup/db/db_"$(date +%F)".sql" " >> /backup/backup.log 为每个变量添加“$”解决了这个问题。
事实上,你没有。
变量用花括号括起来:
你所拥有的是命令调用。"$(" 和 ")" 分隔符内的所有内容都作为单独的命令执行,并且该命令的输出作为调用的结果“返回”:
我认为您的意图是根据当前日期创建文件路径,然后将该文件路径输入 du 命令。所以,一步一步:
你的文件路径是:
这个生成的值中不能有任何空格(%F 返回 YYYY-MM-DD),所以我们不必担心引用文件路径。
将其“插入”到 du 调用中:
最后,在“顶级”回显命令中调用它:
注意大括号的位置——“$(”开始调用,“)”结束。您正在调用两个命令,因此您需要两个结束的 ')'。
另请注意,引号较少 - 一个用于开始字符串值,另一个用于结束它。因为它们是双引号,shell 将扩展其中的所有位,包括变量和命令调用 - 如果它们是单引号,它不会这样做,将整个事物视为字符串文字。
为每个变量添加“$”解决了这个问题。