【发布时间】:2023-09-27 08:41:01
【问题描述】:
我正在使用 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 传递的参数。
但即使我添加引号,引号也包含在参数中,而不是将两个参数合并为一个。
有没有办法让我进入未处理的命令行,这样我就可以查看控制字符或其他东西是否发生了奇怪的事情?
任何见解将不胜感激!
【问题讨论】: