用编译程序后,g++ -o myFile myFile.cpp
我用来./myFile &
执行该程序。
当使用“&”符号时,我知道该程序正在后台执行。
有人能给我指出正确的链接并解释一下是什么./myFile a
意思吗?我不明白为什么使用该命令a
会被解释为输入参数。
答案1
再次阅读你的问题后我想我明白你在问什么。
您在命令提示符中输入的任何内容都会由底层 shell 解释(如果您没有更改它,则是 Bash)。
Bash 在实际运行命令之前会经过多个步骤:
当 shell 读取输入时,它会执行一系列操作。如果输入指示注释的开始,shell 将忽略注释符号(“#”)以及该行的其余部分。
否则,粗略地说,shell 读取其输入并将输入分为单词和操作符,使用引用规则来选择为各个单词和字符分配哪些含义。
然后,shell 将这些标记解析为命令和其他构造,删除某些单词或字符的特殊含义,扩展其他单词或字符,根据需要重定向输入和输出,执行指定的命令,等待命令的退出状态,并使该退出状态可用于进一步检查或处理。
命令右边左边的内容由 中包含的任意分隔符序列分隔$IFS
,通常是,在Bash 完成上述步骤后,将被解释为程序的参数:从技术角度来说,这意味着每个标记都可供程序使用,程序可以按照自己想要的方式使用它。
\t
\n
更具体地说,每个令牌都作为参数传递给execve()
系统调用,系统调用启动程序,并通过以下方式供程序使用:argv
(指向字符的指针,通常包含在的声明/定义中main()
),程序可以访问该指针以检索参数。
答案2
shell 处理这些参数。
这将阻止 shell 执行此操作:
./myFile '&'
因此,程序将获取 & 作为参数。
其他例子:
./myFile *
它会将星号扩展为整个参数列表——当前目录中文件的文件名。