gpt4 book ai didi

bash - Shell 变量定义和替换在一行中正确引用?

转载 作者:行者123 更新时间:2023-11-29 09:48:38 26 4
gpt4 key购买 nike

我想用如下内容替换查​​询中的一些字符串:

URL="sub.domain.tld" mysql -A --user=username --password="password" --host=hostname usernameuction -e "update core_config_data SET value = 'http://${URL}/' WHERE path LIKE 'web/unsecure/base_url'; update core_config_data SET value = 'https://${URL}/' WHERE path LIKE 'web/secure/base_url';"

这几乎完美地工作,除了我必须向它添加一个导出以使其工作:

export URL="sub.domain.tld"; mysql -A --user=username --password="password" --host=hostname usernameuction -e "update core_config_data SET value = 'http://${URL}/' WHERE path LIKE 'web/unsecure/base_url'; update core_config_data SET value = 'https://${URL}/' WHERE path LIKE 'web/secure/base_url';"

如何在不导出的情况下使此工作正常进行,同时将 var 与 bash 或 zsh 中引用的命令保持在同一行?

最佳答案

去掉export,但保留变量定义和mysql命令之间的分号:

URL="sub.domain.tld"; mysql -A --user=username --password="password" --host=hostname usernameuction -e "update core_config_data SET value = 'http://${URL}/' WHERE path LIKE 'web/unsecure/base_url'; update core_config_data SET value = 'https://${URL}/' WHERE path LIKE 'web/secure/base_url';"

说明:当您将变量定义作为单独的命令时,(例如 URL="sub.domain.tld"; mysql ...),该变量在 shell 中定义并应用当解析所有后续命令(如 mysql ...),但未导出到这些命令的环境时。这就是您想要的。

当您导出变量时,(例如 export URL="sub.domain.tld"; mysql ...),该变量在 shell 中定义并在解析后续命令时应用, 被导出到那些命令的环境中。

当您将变量定义作为命令的前缀(例如 URL="sub.domain.tld"mysql ...)时,它不会在 shell 中设置变量全部,而是将其导出到该命令的环境。这根本不适用于您的情况,因为 mysql ... "... https://${URL}/..." 的参数由 shell 扩展,而不是对于 mysql,您需要在 shell 中定义的变量,而不是在 mysql 的环境中。

关于bash - Shell 变量定义和替换在一行中正确引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15999613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com