【Linux详解】——环境变量

news2025/7/17 4:42:13

📖 前言:本期将介绍Linux下的环境变量


目录

  • 🕒 1. 基本概念
    • 🕘 1.1 常见环境变量
    • 🕘 1.2 查看环境变量方法
    • 🕘 1.3 其他指令:
    • 🕘 1.4 环境变量的来源
  • 🕒 2. 环境变量的操作
    • 🕘 2.1 设置环境变量
    • 🕘 2.2 通过getenv获取环境变量
    • 🕘 2.3 通过putenv获取环境变量
    • 🕘 2.4 环境变量的意义
  • 🕒 3. 命令行参数

🕒 1. 基本概念

首先问个问题:为什么运行自己写的程序需要路径,而系统的指令不用路径?
答:是因为系统能找到他的位置。系统中是存在相关的环境变量,保存了程序的搜索路径的!系统中搜索可执行程序的环境变量叫做PATH!
解决方法:把你的程序拷贝到/usr/bin/(不推荐,推荐方法见下面)

  • 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数
  • 如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
  • 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

🕘 1.1 常见环境变量

  • PATH : 指定命令的搜索路径
  • HOME : 指定用户的主工作目录 ( 即用户登陆到 Linux 系统中时 , 默认的目录 )
  • SHELL : 当前 Shell, 它的值通常是 /bin/bash 。

🕘 1.2 查看环境变量方法

echo $NAME //NAME:你的环境变量名称

[hins@VM-12-13-centos test_process_2]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hins/.local/bin:/home/hins/bin

这样就可以显示PATH里面的内容,而不是单纯去把PATH当字符串打印出来

导入环境变量:export PATH=$PATH:/home/hins/testLinux/test_process_2

注:其中的 $PATH 代表之前PATH中内容,: 之后的为新添加的内容;注意不要直接 “export PATH=/home/hins/testLinux/test_process_2”,这样会把之前的PATH覆盖掉,使得Linux中的各种指令必须指定路径使用;同时,PATH中不能用空格,因为Linux中以空格为分隔符。

这样就可以正常使用了

Windows下查看环境变量:设置->关于->高级系统设置->环境变量
在这里插入图片描述

🕘 1.3 其他指令:

[hins@VM-12-13-centos test_process_2]$ echo $HOSTNAME	# 查看当前云服务器名
VM-12-13-centos
[hins@VM-12-13-centos test_process_2]$ echo $PWD		# 查看当前路径
/home/hins/testLinux/test_process_2
[hins@VM-12-13-centos test_process_2]$ echo $LOGNAME	# 查看当前用户名
hins
[hins@VM-12-13-centos test_process_2]$ echo $HOME		# 查看当前用户的家目录
/home/hins
[hins@VM-12-13-centos test_process_2]$ echo $HISTSIZE	# 查看历史命令总容量
3000
[hins@VM-12-13-centos test_process_2]$ history   		# 查看历史输入过的指令
    1  2022-10-23 09:57:05 whoami
    2  2022-10-23 09:57:13 which whoami
    3  2022-10-23 09:57:50 sudo whoami
    4  2022-10-23 10:05:51 pwd
......

小结:

  1. echo: 显示某个环境变量值
  2. export: 设置一个新的环境变量
  3. env: 显示所有环境变量
XDG_SESSION_ID=122878
HOSTNAME=VM-12-13-centos
TERM=xterm
SHELL=/bin/bash
HISTSIZE=3000
SSH_CLIENT=120.231.141.160 28506 22
OLDPWD=/home/hins/testLinux
SSH_TTY=/dev/pts/0
USER=hins
LD_LIBRARY_PATH=:/home/hins/.VimForCpp/vim/bundle/YCM.so/el7.x86_64
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/hins
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hins/.local/bin:/home/hins/bin
PWD=/home/hins/testLinux/test_process_2
LANG=en_US.utf8
SHLVL=1
HOME=/home/hins
LOGNAME=hins
SSH_CONNECTION=120.231.141.160 28506 10.0.12.13 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
XDG_RUNTIME_DIR=/run/user/1001
HISTTIMEFORMAT=%F %T 
_=/usr/bin/env
  1. unset: 清除环境变量
  2. set:显示本地定义的shell变量和环境变量

🕘 1.4 环境变量的来源

在这里插入图片描述

# .bash_profile   
                                                                                
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs
 
PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
# .bashrc                                                                                         

# Source global definitions
if [ -f /etc/bashrc ]; then
   . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
alias vim='/home/hins/.VimForCpp/nvim'
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.VimForCpp/vim/bundle/YCM.so/el7.x86_64

在我们登录 shell 时,操作系统会让我们当前的 shell 进程执行 .bash_profile 中的内容,而 .bash_profile 又会调用执行 .bashrc,它们会将对应的环境变量导入到 shell 进程的上下文环境中。所以,如果我们上面不小心将 $PATH 覆盖掉了也不用担心,重新登录 shell 就好了。

至此,环境变量的定义如下:

环境变量是操作系统为了满足不同的应用场景,预先在系统内设置的一大批全局变量,这些变量往往具有特殊功能,且能够一直被 bash 以及 bash 的子进程访问。

注:环境变量具有全局属性的根本原因是环境变量会被子进程继承

🕒 2. 环境变量的操作

🕘 2.1 设置环境变量

Linux命令行其实是可以定义变量的,但是以这种方式定义出来的变量是本地变量,即只在 bash 进程中有效;而不是环境变量,因为环境变量具有全局属性:
我们可以使用 export 直接定义环境变量,也可以使用它将已存在的本地变量导为环境变量:

🕘 2.2 通过getenv获取环境变量

有了 getenv 函数后,我们就可以自己编写系统中的某些指令了,比如 pwd:

#include <stdio.h>
#include <stdlib.h>

#define MYPWD "PWD"

int main()
{
    char* env = getenv(MYPWD);
    printf("%s\n", env);	// 输出路径
    return 0;
}

🕘 2.3 通过putenv获取环境变量

后面讲解

🕘 2.4 环境变量的意义

上面提到,环境变量是操作系统为了满足不同的应用场景,预先在系统内设置的一大批全局变量;其中 PATH 是为了满足我们指令路径搜索的需求,而除了指令需求之外还有许多其他需求,其中非常重要的一个就是 身份认证。

我们以一个例子说明:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define USER "USER"

int main()
{
    char* who = getenv(USER);
    if(strcmp(who, "root") == 0)
    {
        printf("Operation success!\n");
    }
    else 
    {
        printf("Permission denied!\n");
    }
    return 0;
}
[hins@VM-12-13-centos test_env]$ echo $USER
hins
[hins@VM-12-13-centos test_env]$ ./mycmd
Permission denied!	
[hins@VM-12-13-centos test_env]$ su -
Password: 
Last login: Sat Oct 29 10:09:53 CST 2022 from 120.231.141.27 on pts/0
Last failed login: Tue Nov 15 14:49:41 CST 2022 on pts/0
There were 80330 failed login attempts since the last successful login.
[root@VM-12-13-centos ~]# cd /home/hins/testLinux/test_env
[root@VM-12-13-centos test_env]# echo $USER
root
[root@VM-12-13-centos test_env]# ./mycmd
Operation success!
[root@VM-12-13-centos test_env]# 

注:这里要使用 su -,而不能使用 su,因为 su - 会重新登录 shell,此时 shell 会重新加载环境变量,让 $USER 从 hins 变为 root;而 su 只是把用户身份切换为 root。

我们可以在程序内部通过 getenv 函数来获取当前的Linux用户,然后判断其是否具备某种权限,再执行对应操作;

另外,我们还可以通过 stat 来获取一个文件的其他属性,比如读写执行等,然后根据这些属性判断一个用户是否能对该文件进行操作:

🕒 3. 命令行参数

我们上面提到,程序可以通过 getenv 函数来获取环境变量,其实除了 getenv 函数,程序还可以通过命令行参数传递来获取环境变量。

在C语言中,main 函数其实是有参数的,且这些参数通过命令行传递:

int main(int argc, char* argv[], char* env[]);

其中 argv 是一个指针数组,数组里面的每一个元素都指向一个字符串,argc 用来指定数组元素的个数;它们配合使用可以实现类似于 ls -a -l -d 选项的功能。就是同一个程序,通过传递不同的参数(选项),让同一个程序有不同的执行逻辑,产生不同的结果。

而指针数组 env 就是用于接受父进程传递过来环境变量的参数,我们可以通过在 main 函数中打印 env 中的内容来验证它:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[], char* env[])
{
    int i = 0;
    for(i=0; env[i]; i++)
    {
        printf("env[%d]:%s\n", i, env[i]);
    }
    return 0;
}
[hins@VM-12-13-centos test_env]$ ./mycmd
env[0]:XDG_SESSION_ID=123580
env[1]:HOSTNAME=VM-12-13-centos
env[2]:TERM=xterm
env[3]:SHELL=/bin/bash
env[4]:HISTSIZE=3000
env[5]:SSH_CLIENT=120.231.141.160 28439 22
env[6]:OLDPWD=/home/hins
env[7]:SSH_TTY=/dev/pts/0
env[8]:USER=hins
env[9]:LD_LIBRARY_PATH=:/home/hins/.VimForCpp/vim/bundle/YCM.so/el7.x86_64
env[10]:LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
env[11]:MAIL=/var/spool/mail/hins
env[12]:PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hins/.local/bin:/home/hins/bin
env[13]:PWD=/home/hins/testLinux/test_env
env[14]:LANG=en_US.utf8
env[15]:SHLVL=1
env[16]:HOME=/home/hins
env[17]:LOGNAME=hins
env[18]:SSH_CONNECTION=120.231.141.160 28439 10.0.12.13 22
env[19]:LESSOPEN=||/usr/bin/lesspipe.sh %s
env[20]:PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
env[21]:XDG_RUNTIME_DIR=/run/user/1001
env[22]:HISTTIMEFORMAT=%F %T 
env[23]:_=./mycmd

程序也可以通过环境表 environ 来获取环境变量 – 环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串;每个进程都会收到一张环境表:
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char* argv[], char* env[])
{
    extern char** environ;
    int i = 0;
    for(i=0; environ[i]; i++)
    {
        printf("%d:%s\n", i, environ[i]);
    }
    return 0;
}

OK,以上就是本期知识点“环境变量”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022亚太杯建模A题思路分析 小美赛数学建模 A题思路

一、 2022亚太杯大学生数学建模竞赛 注册截止日期&#xff1a;北京时间2022年11月23日&#xff08;星期三&#xff09;中午12点 竞赛开始时间&#xff1a;北京时间2022年11月24日&#xff08;星期四&#xff09;上午6点 竞赛结束时间&#xff1a;北京时间2022年11月28日&#…

OpenCV实战(2)——OpenCV核心数据结构

OpenCV实战&#xff08;2&#xff09;——OpenCV核心数据结构0. 前言1. cv::Mat 数据结构1.1 cv::Mat 简介1.2 cv::Mat 属性1.3 完整代码示例2. 探索 cv::Mat 数据结构2.1 cv::Mat 对象的创建2.2 OpenCV 输入和输出数组小结系列链接0. 前言 cv::Mat 类是用于保存图像(以及其他…

2022 SPSSPRO杯A|B|C题全网最全解题思路+数据分享

一&#xff0c;认证杯数学建模2022 ABC题干分析 2022年第十五届“SPSSPRO杯”数学中国数学建模网络挑战赛 2022认证杯数学中国数学建模网络挑战赛 认证杯这次叫spssrpo 二&#xff0c;A题 人员的紧急疏散 在过去的几十年里&#xff0c;由于大规模集会活动的数量和规模的增加…

大数据采集工具与采集业务划分

目录1- FlumeAgentSourceChannelSinkEvent2- Fluentd3- Logstash4- Chukwa5- Scribe6- Splunk7- Scrapy8- Kafka9- Datax10-日志采集11-数据源数据同步1- Flume https://flume.apache.org/ Flume是Cloudera提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志…

代码随想录56——动态规划:583两个字符串的删除操作、72编辑距离

文章目录1.583两个字符串的删除操作1.1.题目1.2.解答2.72编辑距离2.1.题目2.2.解答1.583两个字符串的删除操作 参考&#xff1a;代码随想录&#xff0c;583两个字符串的删除操作&#xff1b;力扣题目链接 1.1.题目 1.2.解答 本题和 动态规划&#xff1a;115.不同的子序列 相…

在Python中 先乘再除 和 先除再乘 是有差别的

浮点数的原因<font colorblue size4 face"楷体">1 问题来源<font colorblue size4 face"楷体">2 为什么会这样&#xff1f;<font colorblue size4 face"楷体">2.1 分解公式<font colorblue size4 face"楷体">…

最近面试被问到的vue题

v-for 为什么要加 key 如果不使用 key&#xff0c;Vue 会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法。key 是为 Vue 中 vnode 的唯一标记&#xff0c;通过这个 key&#xff0c;我们的 diff 操作可以更准确、更快速 更准确&#xff1a;因为…

初阶牛之牛客网刷题集(1)

前言 记录一下牛牛自己在牛客网上刷到的一些题目.分享一下牛牛的解题思路,希望可以帮到大家. 目录前言1.母牛的故事解题思路&#xff1a;代码实现&#xff1a;2.替换空格解题思路:代码实现3.二进制中1的个数解题思路代码实现结语1.母牛的故事 题目链接:传送门 有一头母牛&am…

43期《深入浅出Pytorch》课程 - Task01:PyTorch的安装和基础知识+前置知识打卡

Task011、Pytorch安装2、基础知识2.1 张量(Tensor)2.2 自动求导2.3 梯度2.4 并行计算3、前置知识打卡1、Pytorch安装 由于之前使用过Pytorch&#xff0c;所以说不需要再重新下载&#xff0c;直接开始后续的基础知识 2、基础知识 由于之前学习过numpy系列&#xff0c;所以说…

用专业团队管理软件工具轻松“拿捏”年轻运营团队

本文旨在抛砖引玉&#xff0c;欢迎大家拍砖讨论&#xff0c;通过一款时下流行的专业团队管理软件飞项做案例&#xff0c;一起探讨和交流团队管理专业工具软件和一些对应的方法论。 说到国内这几年流行起来的团队管理工具软件&#xff0c;我们先看看互联网这几年的发展。这几年&…

网络舆情监测是干嘛的?

近年来&#xff0c;有赖于移动网络技术的发展和社会化媒体概念的崛起&#xff0c;讯息的传播与扩散速度得到了空前的提高&#xff0c;而对于民营企业来说同样带来了不少的挑战&#xff0c;接下来TOOM舆情监测系统小编带您简单介绍网络舆情监测是干什么的? 一、什么是网络舆情监…

用户画像系列——布隆过滤器在策略引擎中的应用

在用户画像系列——当我们聊用户画像&#xff0c;我们在聊什么&#xff1f; 介绍了用户画像的应用场景: (1)个性化推荐 通过用户标签给用户推荐合适的商品或者内容 (2)营销圈选 参考&#xff1a;用户画像系列——Lookalike在营销圈选扩量中的应用 (3)策略引擎 根据用户标…

HTML5网页设计制作基础大二dreamweaver作业、使用HTML+CSS技术制作博客网站(5个页面)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

重磅推出!CrownCAD 2023全功能试用通道已开启!

CrownCAD 2023已于10月28日正式发布&#xff0c;为了更好地提升设计效率&#xff0c;不仅增强已有功能的智能性、标准性、应用性&#xff0c;更是在产品定义、属性、仿真、数据管理等方面再度突破&#xff0c;更加贴合中国制造需求。 CrownCAD 2023全功能试用通道已开启 为让…

如何在Win10上安装docker

[版权申明] 非商业目的注明出处可自由转载 出自&#xff1a;shusheng007 前言 没有了Mac Pro&#xff0c;我又捡起了我的Windows…&#xff0c;这是我给她安装docker的的记录&#xff0c;你愿意也可以瞅一眼 检查win10版本 我们的安装基于WSL2&#xff08;Windows subsystem…

【深入理解Kotlin协程】lifecycleScope源码追踪扒皮

lifecycleScope是LifecycleOwner的扩展属性&#xff0c;而 ComponentActivity 和 Fragment&#xff08;androidx&#xff09;都实现了 LifecycleOwner 接口&#xff0c;所以这就是为什么说lifecycleScope的作用范围是只能在Activity、Fragment中使用。public val LifecycleOwne…

vue-element-admin动态菜单(后台获取)

vue-element-admin动态菜单&#xff08;后台获取&#xff09;&#xff0c;此教程面向纯小白攻略&#xff0c;不要嫌我啰嗦&#xff0c;翻到自己需要的地方即可 前提 vue-element-admin官网&#xff1a; vue-element-admin (gitee.io) vue-element-admin页面展示&#xff1a;…

Spring Boot框架下实现Excel服务端导入导出

Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。今天我们就使用纯前对按表格控件带大家了解&#xff0c;如何在Spring…

高精度算法【加减乘除】

全文目录&#x1f60d; 前言&#x1f600; 高精度加法&#x1f914; 操作步骤&#x1f635;‍&#x1f4ab; 代码模板&#x1f600;高精度减法&#x1f914;操作步骤&#x1f635;‍&#x1f4ab; 代码模板&#x1f600;高精度乘法&#x1f914;操作步骤&#x1f635;‍&#x…

[R]第二节 对象介绍与赋值运算

前言 R 创建、控制的实体(entity)称为对象(object)。向量(vector)矩阵(matrix)数组(array)数据框(data frame)列表(list)因子(factor)函数(function)通过以上实体定义的更为一般性的结构(structures) 数据的存储形式 R语言进行数据存储选择一种合适的数据结构将已有的数据输入…