Should environment variables that contain a executable-path with spaces also contain the necessary quotes?

我与影子孤独终老i 提交于 2019-12-23 10:58:55

问题


When defining an environment variable (on Windows for me, maybe there is a more general guideline)

set MY_TOOL=C:\DevTools\bin\mytool.exe

if the tool is located on a path with spaces

set MY_TOOL=C:\Program Files (x86)\Foobar\bin\mytool.exe

should the environment variable already contain the necessary spaces?

That is, should it read:

set MY_TOOL="C:\Program Files (x86)\Foobar\bin\mytool.exe"

instead of the above version without spaces?

Note: In light of Joeys answer, I really should narrow this question to the examples I gave. That is, environment variables that contain one single (executable / batch) tool to be invoked by a user or by another batch script.

Maybe the spaces should be escaped differently?


回答1:


I'd say, do it without quotes and use them everywhere you use the variable:

set MY_TOOL=C:\Program Files (x86)\Foobar\bin\mytool.exe

"%MY_TOOL%" -someoption someargument somefile

Especially if you let the user set the value somewhere I guess this is the safest option, since they usually tend not to surround it with quotes rather than do so.

If there are plenty of places where you use the variable you can of course redefine:

set MY_TOOL="%MY_TOOL%"

which makes things more resilient for you. Optionally you could detect whether there are quotes or not and add them if not present to be totally sure.

When your variable represents only a path to a directory and you want to append file names there, then the "no quotes" thing is even more important, otherwise you'd be building paths like

"C:\Program Files (x86)\Foobar\bin"\mytool.exe

or even:

""C:\Program Files (x86)\Foobar\bin"\my tool with spaces.exe"

which I doubt will parse correctly.




回答2:


The command shell can answer your question: type C:\Pro and hit the tab key.

Autocomplete will leave all spaces as-is and add quotes around the filename. So, this is what is "officially" expected.

(this assumes that autocomplete is turned on, I'm not sure whether the default is on or off, but most people have it on anyway, I guess)



来源:https://stackoverflow.com/questions/6730429/should-environment-variables-that-contain-a-executable-path-with-spaces-also-con

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!