1.问题:为什么自己写的程序需要加上./才能执行,但是指令可以直接使用,例:ls -al?
因为:不加"./"执行程序的时候会按环境变量PATH里面的各个路径找到就正常执行,找不到就报错;
查找环境变量的方法:echo $环境变量名
echo $PATH
如果想让自己写的代码可以不用加"./"的话,改变使用export改变环境变量
2.关于环境变量的命令
env:显示所有的环境变量
echo $环境变量名:显示指定环境变量
export: 设置一个新的环境变量
unset 环境变量名:清除环境变量
set:显示本地定义的shell变量和环境变量
内容特别多
本地变量和环境变量区别
- 本地变量只存在这次登录,环境变量不删除每次登录都在(环境变量值可能会被刷新)
3.main函数的命令行参数
int main(int argc,char* argv[])
#include<iostream>
using std::cout;
using std::endl;
int main(int argc,char* argv[])
{
for(int i=0;i<argc;i++)
{
cout<<argv[i]<<endl;
}
return 0;
}
使用上面这段代码来测试一下argc和argv是具体什么;
- 由上面的执行结果可以得出argc是命令行输入以空格隔开的字符串的个数,argv是一个包括以空格隔开的字符串的字符串指针数组
#include<string.h>
#include<iostream>
using std::cout;
using std::endl;
int main(int argc,char* argv[])
{
if(argc!=2)
{
cout<<"mycode -a/-b"<<endl;
return 1;
}
if(strcmp(argv[1],"-a")==0)
{
cout<<"Option 1"<<endl;
}
else if(strcmp(argv[1],"-b")==0)
{
cout<<"Option 2"<<endl;
}
else
{
cout<<"default"<<endl;
}
return 0;
}
执行上面代码
- 可以得出命令行的执行原理
4.在代码中怎么获取环境变量值
get("环境变量"):获取对应的环境变量值
#include<stdlib.h>
#include<iostream>
using std::cout;
using std::endl;
int main(int argc,char* argv[])
{
cout<<getenv("PATH")<<endl;
return 0;
}
执行结果:
环境变量具有全局属性
#include<stdlib.h>
#include<iostream>
using std::cout;
using std::endl;
int main(int argc,char* argv[])
{
cout<<getenv("MYENV")<<endl;
return 0;
}
一开始执行结果:
把MYENV加入环境变量中,执行结果 :