如何处理命令行中的空格和引号

如何处理命令行中的空格和引号

我用过此链接用于防止程序使用 Ubuntu/Linux 上的互联网连接。

但是我仍然无法完成最后一步,如下所示:

$ ni wine C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe
bash: syntax error near unexpected token `('
$ ni "wine C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe"
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `wine C:\Program Files (x86)\Foxit Software\Foxit    Reader\FoxitReader.exe'
$ ni wine "C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe"
Usage: wine PROGRAM [ARGUMENTS...]   Run the specified program
       wine --help                   Display this help and exit
       wine --version                Output version information and exit
$ ni wine FoxitReader.exe
Usage: wine PROGRAM [ARGUMENTS...]   Run the specified program
       wine --help                   Display this help and exit
       wine --version                Output version information and exit

答案1

语法错误意味着 shell 无法解释您的命令。这是因为 shell 在解析命令行时会根据空格拆分单词。如果没有引号,参数的每个部分(例如C:\Program)都会被视为单独的参数。您可以使用引号来防止单词拆分:

ni wine "C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe"

这会将两个参数传递给ni命令:wine以及 FoxitReader 的完整 Windows 路径。

当您尝试在 之前放置开头的双引号时wine,shell 会将 整个 视为wine C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exeni命令的一个参数。

如果你想避免将来出现类似的问题,我建议你查看 Greg 的 wiki,以获得关于shell 如何处理空格。您可能无法全部理解,但您仍然应该了解为什么、何时以及如何避免单词分割问题。

答案2

Anthony 说的没错,你可以使用“”来表示整个路径是一个字符串,但也许这值得考虑,因为你可以使用这种方法来完成你的路径:unix 终端中有许多特殊字符,包括空格、*、换行符和其他字符。你可以在它们前面输入“\”来忽略它们。因此,如果文件夹名为“My test”,则可以使用cd "My test"cd My\ test来完成。但在 wine 中,你可能必须使用 Michaelsoft Binbows 约定“”。(无意冒犯,只是微软的笑话:D)

“专业提示 :D” 有时您可能出于某种原因想要写一个“\”字符。要写它,您必须保护它,因此您需要在它前面再放一个“\”。因此,如果您想写“受保护的字符 \”,您实际上可以这样做echo Protected character \\。请注意,echo 接受字符串参数,因此您不必保护空格。

希望能帮助到你 :)

相关内容