文章目录
  1. 1. 环境变量与文件查找
  2. 2. _GNU_SOURCE

红色警戒Ⅲ:帝国工程师

2016-4-21周四

天气:晴朗

环境变量与文件查找

  1. 变量

Shell变量,所谓变量就是计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中。通常变量与值是一对一的关系,可以通过表达式读取它的值赋值给其它变量,也可以直接指定数值赋值给任意变量。

为了便于运算和处理,大部分的编程语言会区分变量的类型,用于分别记录数值、字符或者字符串等等数据类型。Shell 中的变量也基本如此,有不同类型(但不用专门指定类型名),可以参与运算,有作用域限定。

变量的作用域即变量的有效范围(比如一个函数中、一个源文件中或者全局范围),在该范围内只能有一个同名变量。一旦离开则该变量无效,如同不存在这个变量一般。

实例:
使用declare命令创建一个变量名为 tmp 的变量

其实也可以不用 declare 预声明一个变量,直接即用即创建,这里只是告诉你 declare 的作用,这在创建其它指定类型的变量(如数组)时会用到

1
2
3
4
5
6
7
root@ubuntu:~# declare tmp
root@ubuntu:~# tmp=takethat
root@ubuntu:~# echo $tmp
takethat
root@ubuntu:~# tmp2=takethat2
root@ubuntu:~# echo $tmp2
takethat2

读取变量的值,使用echo命令和$符号

  1. 环境变量

境变量就是作用域比自定义变量要大,如Shell 的环境变量作用于自身和它的子进程。在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,处理创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。Shell 程序也作为一个进程运行在操作系统之上,而我们在 Shell中运行的大部分命令都将以 Shell 的子进程的方式运行。

shell环境变量

通常涉及到的环境变量有三种:

一:当前Shell进程私有用户自定义变量,如上面我们创建的temp变量,只在当前Shell中有效

二:Shell本身内建的变量

三:从自定义变量到处的环境变量。

也有三个与上述三种环境变量相关的命令,setenvexport。这三个命令很相似,都可以用于打印相关环境变量,区别在于涉及的是不同范围的环境变量,详见下表:

命令 说明
set 显示当前Shell所有环境变量,包括其内建环境变量(与Shell外观等相关),用户自定义变量及导出的环境变量
env 显示当前用户相关的环境变量,还可以让命令在指定环境中运行
export 显示从Shell中导出成环境变量的变量,也能通过自定义变量到处为环境变量

3个环境变量命令关系

实际操作:

1
2
3
4
5
root@ubuntu:~# temp=takethat
root@ubuntu:~# export temp_env=takethat
root@ubuntu:~# env|sort>env.txt
root@ubuntu:~# export|sort>export.txt
root@ubuntu:~# set|sort>set.txt

_GNU_SOURCE

可以访问低级函数(所以移植性不好)、传统函数、破坏POSIC函数,所以移植性不好;

What does “#define _GNU_SOURCE” imply?

  1. vscode影响

    Support gnu standard versions for querying compiler

~/.config/Code/User/settings.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"files.autoSave": "afterDelay",
"window.zoomLevel": 1,
"python.linting.pylintPath": "/home/takethat/.local/bin/pylint",
"python.pipenvPath": "/root/.local/bin/pipenv",
"files.maxMemoryForLargeFilesMB": 12288,
"C_Cpp.updateChannel": "Insiders",
"http.proxySupport": "off",
"editor.wordWrap": "on",
"explorer.sortOrder": "modified",
"http.proxyAuthorization": null,
"extensions.autoUpdate": false,
"C_Cpp.inactiveRegionBackgroundColor": "",
"C_Cpp.dimInactiveRegions": false,
"C_Cpp.inactiveRegionOpacity": null,
"C_Cpp.default.defines": ["_GNU_SOURCE","_POSIX_C_SOURCE"]
}

"C_Cpp.default.defines": ["_GNU_SOURCE] 这句才能跳转到C语言定义,不然vscode无法跳转到定;

文章目录
  1. 1. 环境变量与文件查找
  2. 2. _GNU_SOURCE