gpt4 book ai didi

带空格的 Bash 变量

转载 作者:行者123 更新时间:2023-11-29 08:42:31 26 4
gpt4 key购买 nike

我在 Windows 下的 MinGW shell 中面临下一个问题。我的 /etc/profile 表达式中有:

export GIT_SSH="/c/Program Files/TortoiseGit/bin/TortoisePlink.exe"

当我在本地存储库上使用 git fetch 时,这不起作用。但如果我这样做(旧的 DOS 方式),它会起作用:

export GIT_SSH="/c/Progra~1/TortoiseGit/bin/TortoisePlink.exe"

我的问题是:

如何使用变量中的空格使其工作?

出于测试目的,您可以模拟这样的事情(任何示例都很好):

export VAR="/c/Program Files/TortoiseGit/bin/TortoisePlink.exe"
# and try to execute like this
$VAR

是否有解决此问题的方法(除了前面提到的)?

最佳答案

像这样执行:"$VAR"。这是 shell 脚本中最重要的陷阱之一,因为字符串总是按字面替换,并且任何包含的空格都被视为标记定界符而不是字符串的字符。将替换变量视为一种在运行时粘贴代码。

当您编写 $VAR 时真正发生的是 shell 尝试使用第一个参数 Files/TortoiseGit/bin 执行二进制 /c/Program/TortoisePlink.exe.

我通过在大型 shell 脚本中针对特定输入遇到奇怪的语法错误来艰难地学会了这一点。如果运行时输入包含特殊字符,我能想到的任何其他语言都不会提示语法错误 - 但这是 shell 脚本的本质,因为像 bash 和 sh 这样的命令解释器逐行解释代码。

每当您希望字符串包含空格并且不想将其视为单独的标记时,请将其括在双引号中。

关于带空格的 Bash 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5819423/

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