我正在使用 MSYS在 Windows 上获得一些理智的可编写脚本的外壳 :)。
现在我正在编写一个用 C# 编写的控制台应用程序,它接受大量参数并将这些参数作为选项显示在对话框中给用户。实际选项对应于我使用 ls 检索的文件名。
但是,当我的文件名中有空格时,就会出现问题。假设我的文件名为:
file name
with spaces
在名为 foo 的目录中,我的 C# 可执行文件名为 bar,我在其中检查“argv”数组的内容(即,传递给我的应用程序的命令行参数,由 .NET 解释)。
调用时出现如下异常:
./bar.exe "文件名""带空格"-->
file name
with spaces
./bar.exe $(ls foo) -->
file
name
with
spaces
./bar.exe $(ls -Q foo) -->
"file
name"
"with
spaces"
有人知道这里发生了什么吗?显然,.NET 没有正确解析 bash 或 ls 传递的参数。
但即使我添加引号,引号也会包含在参数中,而不是将两个参数合二为一。
有没有办法让我进入未处理的命令行,这样我就可以看到控制字符或其他东西是否发生了有趣的事情?
任何见解将不胜感激!
最佳答案
您可以使用Environment.Command Line
获取原始命令。不确定 bash 的东西,抱歉;可能涉及行尾(CR vs LF vs CRLF vs LF CR)。
关于C# 命令行参数和 ls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/649697/