一文讲懂Mac中的环境变量

news/2024/9/18 6:03:49/ 标签: macos, 环境变量

你是否曾经因为环境变量配置不当而浪费了宝贵的开发时间?你是否好奇为什么有时候在终端输入命令会提示"command not found",而有时候又能正常运行?如果你是一名Mac用户,并且希望真正掌握环境变量的奥秘,那么这篇文章将为你揭开Mac中环境变量的神秘面纱,帮助你成为一名更高效的开发者。
image.png

目录

什么是环境变量?

环境变量是一种在操作系统中存储的动态命名值,可以影响系统中运行程序的行为。简单来说,它们就像是你电脑中的一个个小便签,上面记录着各种重要信息,这些信息可以被系统或其他程序读取和使用。

在Mac(以及其他Unix-like系统)中,环境变量通常表现为"键值对"的形式:

KEY=value

例如,一个常见的环境变量PATH,它告诉系统在哪里查找可执行文件:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

image.png

为什么环境变量如此重要?

环境变量之所以重要,是因为它们在软件开发和系统管理中扮演着关键角色:

  1. 命令行工具的可用性: PATH环境变量决定了系统在哪里查找可执行文件。正确配置PATH可以让你在任何目录下使用命令行工具。

  2. 配置应用程序行为: 许多应用程序使用环境变量来确定其行为。例如,JAVA_HOME环境变量告诉Java应用程序在哪里找到Java运行时。

  3. 安全性: 某些环境变量用于存储敏感信息,如API密钥或数据库连接字符串,这样可以避免将这些信息硬编码到源代码中。

  4. 跨平台兼容性: 环境变量提供了一种在不同操作系统间共享配置的方法。

  5. 开发环境管理: 不同的项目可能需要不同版本的工具或库。通过环境变量,你可以轻松切换между不同的开发环境。
    image.png

Mac中常见的环境变量

让我们来看看Mac系统中一些常见且重要的环境变量:

  1. PATH:

    • 作用:指定系统查找可执行文件的目录列表。
    • 示例:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
  2. HOME:

    • 作用:指定当前用户的主目录。
    • 示例:/Users/yourusername
  3. USER:

    • 作用:当前登录用户的用户名。
    • 示例:yourusername
  4. SHELL:

    • 作用:指定当前用户的默认shell。
    • 示例:/bin/zsh
  5. LANG:

    • 作用:设置程序的语言和区域设置。
    • 示例:en_US.UTF-8
  6. JAVA_HOME:

    • 作用:指定Java开发工具包(JDK)的安装位置。
    • 示例:/Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home
  7. PYTHONPATH:

    • 作用:指定Python查找模块的额外目录。
    • 示例:/Users/yourusername/projects/python_modules
  8. NODE_ENV:

    • 作用:指定Node.js应用程序的运行环境(如开发、生产等)。
    • 示例:development
  9. EDITOR:

    • 作用:指定默认的文本编辑器。
    • 示例:/usr/bin/vim
  10. TERM:

    • 作用:指定终端类型。
    • 示例:xterm-256color
      image.png

如何查看Mac中的环境变量

在Mac中,有several 线下查看环境变量的方法:

  1. 使用env命令:
    打开终端,输入以下命令:

    env
    

    这将列出所有当前设置的环境变量

  2. 使用printenv命令:

    printenv
    

    这个命令的效果与env类似。

  3. 查看特定的环境变量:
    如果你只想查看某个特定的环境变量,可以使用echo命令:

    echo $PATH
    

    这将显示PATH环境变量的值。

  4. 使用set命令:

    set
    

    这个命令会显示所有的shell变量,包括环境变量

  5. 在图形界面中查看:
    你也可以通过以下步骤在图形界面中查看系统环境变量:

    • 打开 “终端” 应用程序
    • 在菜单栏中选择 “Shell” > “新建窗口” > “系统环境变量
      这将打开一个新的终端窗口,显示所有的系统环境变量
      image.png

让我们通过一个实际的例子来演示如何查看和理解环境变量:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/homebrew/bin$ echo $HOME
/Users/yourusername$ printenv | grep JAVA
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home

在这个例子中,我们首先查看了PATH环境变量,它显示了一系列由冒号分隔的目录。这些目录就是系统查找可执行文件的地方。然后我们查看了HOME环境变量,它指向当前用户的主目录。最后,我们使用grep命令过滤出包含"JAVA"的环境变量,这里显示了JAVA_HOME的设置。

理解这些环境变量的含义和作用,对于排查问题和优化开发环境至关重要。例如,如果你安装了一个新的命令行工具,但在终端中无法使用,很可能是因为它的安装目录没有被添加到PATH环境变量中。

设置环境变量的方法

在Mac中设置环境变量有两种主要方法:临时设置和永久设置。让我们详细探讨这两种方法。

临时设置

临时设置的环境变量只在当前终端会话中有效。一旦关闭终端窗口或重启电脑,这些设置就会失效。

  1. 使用export命令:

    export MY_VARIABLE="Hello, World!"
    

    这会创建一个名为MY_VARIABLE的新环境变量

  2. 在命令前设置:

    MY_VARIABLE="Hello, World!" python my_script.py
    

    这种方法只为特定命令设置环境变量

示例:假设你正在开发一个Python应用,需要临时设置一个API密钥:

$ export API_KEY="your-secret-api-key"
$ python
Python 3.9.5 (default, May  4 2021, 03:33:11) 
[Clang 12.0.0 (clang-1200.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print(os.environ.get('API_KEY'))
your-secret-api-key
>>> exit()$ echo $API_KEY
your-secret-api-key$ # 关闭终端后,再次打开新的终端窗口
$ echo $API_KEY
# 此时不会显示任何内容,因为环境变量已经失效

image.png

永久设置

如果你希望环境变量在重启后依然有效,你需要将它们添加到shell的配置文件中。对于大多数Mac用户来说,默认的shell是Zsh。

  1. 编辑~/.zshrc文件:

    nano ~/.zshrc
    
  2. 添加环境变量:
    在文件的末尾添加:

    export MY_VARIABLE="Hello, World!"
    
  3. 保存并退出:
    Ctrl+X,然后按Y,最后按Enter

  4. 重新加载配置文件:

    source ~/.zshrc
    

示例:让我们永久设置JAVA_HOME环境变量:

$ echo 'export JAVA_HOME=$(/usr/libexec/java_home)' >> ~/.zshrc
$ source ~/.zshrc
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home

这个例子中,我们使用java_home工具动态获取Java安装路径,并将其设置为JAVA_HOME环境变量。通过将这行配置添加到~/.zshrc文件中,我们确保每次打开新的终端窗口时,这个环境变量都会被正确设置。

注意:如果你使用的是Bash而不是Zsh,你需要编辑~/.bash_profile~/.bashrc文件。

系统级环境变量

image.png

除了用户级的环境变量,Mac还允许设置系统级的环境变量,这些变量对所有用户都有效。

  1. 创建或编辑/etc/paths.d/目录下的文件:

    sudo nano /etc/paths.d/mypath
    
  2. 添加新的路径:
    在文件中添加新的路径,每行一个。

  3. 保存并退出

这种方法主要用于修改系统的PATH环境变量。对于其他类型的系统级环境变量,你可以编辑/etc/environment文件:

sudo nano /etc/environment

在这个文件中,你可以添加键值对形式的环境变量:

SYSTEM_WIDE_VARIABLE="This is a system-wide environment variable"

记住,修改系统级配置需要管理员权限,而且可能影响系统的稳定性,请谨慎操作。

环境变量加载顺序

image.png

了解Mac中环境变量的加载顺序对于解决冲突和优化配置至关重要。以下是Mac(使用Zsh作为默认shell)加载环境变量的大致顺序:

  1. /etc/zshenv
  2. ~/.zshenv
  3. /etc/zprofile
  4. ~/.zprofile
  5. /etc/zshrc
  6. ~/.zshrc
  7. /etc/zlogin
  8. ~/.zlogin

这个顺序意味着:

  • 系统级配置(/etc/下的文件)先于用户级配置(~/下的文件)加载。
  • zshenv文件最先加载,适合放置重要的环境变量
  • zshrc文件在交互式shell中加载,适合放置别名(alias)和函数定义。
  • zlogin文件最后加载,适合放置登录后的设置。

理解这个加载顺序可以帮助你更好地组织你的环境变量配置。例如,如果你想要某个环境变量在所有情况下都可用(包括非交互式shell),你应该将它放在~/.zshenv中。

让我们通过一个实际的例子来说明这个加载顺序的重要性:

# 在 /etc/zshenv 中
export GLOBAL_VAR="Hello from global"# 在 ~/.zshenv 中
export GLOBAL_VAR="Hello from user"
export USER_VAR="User specific"# 在 ~/.zshrc 中
alias print_vars='echo $GLOBAL_VAR && echo $USER_VAR'

在这个例子中:

  • GLOBAL_VAR在系统级和用户级在这个例子中:
  • GLOBAL_VAR在系统级和用户级配置中都被定义了。
  • USER_VAR只在用户级配置中定义。
  • 我们在~/.zshrc中定义了一个别名来打印这些变量。

当我们打开一个新的终端窗口时,会发生以下情况:

$ echo $GLOBAL_VAR
Hello from user
$ echo $USER_VAR
User specific
$ print_vars
Hello from user
User specific

这个结果说明:

  1. 用户级的~/.zshenv中的设置覆盖了系统级的/etc/zshenv中的设置。
  2. ~/.zshrc中定义的别名成功加载并可以使用。

理解这种加载顺序可以帮助你解决环境变量冲突,并确保你的配置按预期工作。

常见问题和解决方案

在使用Mac的环境变量时,开发者可能会遇到一些常见问题。让我们来看看这些问题以及它们的解决方案:
image.png

1. 环境变量没有生效

问题: 你设置了一个新的环境变量,但是在新的终端窗口中无法使用。

解决方案:

  • 确保你已经正确地设置了环境变量,并且在正确的配置文件中设置(~/.zshrc~/.zshenv)。
  • 使用source命令重新加载配置文件:
    source ~/.zshrc
    
  • 如果问题仍然存在,尝试重启终端应用程序或注销并重新登录。

2. PATH环境变量混乱

问题: 某些命令无法找到,或者系统使用了错误版本的命令。

解决方案:

  • 检查你的PATH环境变量:
    echo $PATH
    
  • 确保重要的目录位于PATH的前面。你可以在~/.zshrc中重新设置PATH:
    export PATH="/usr/local/bin:$PATH"
    
  • 使用which命令检查特定命令的位置:
    which python
    

3. 环境变量包含空格

问题: 包含空格的环境变量值导致错误。

解决方案:

  • 在设置环境变量时使用引号:
    export MY_VAR="This is a value with spaces"
    

4. 子进程无法访问环境变量

问题: 在脚本或子进程中无法访问某些环境变量

解决方案:

  • 确保变量已经被导出。使用export命令而不是简单的赋值:
    export MY_VAR="value"  # 正确
    MY_VAR="value"  # 错误,不会传递给子进程
    
  • 对于需要在所有情况下都可用的变量,将其设置在~/.zshenv文件中。

5. IDE或图形应用程序无法识别环境变量

问题: 在终端中设置的环境变量在IDE或其他图形应用程序中不可用。

解决方案:

  • 对于通过Dock启动的应用程序,你可能需要在~/.zshenv中设置环境变量
  • 或者,你可以创建一个launchd.conf文件来设置全系统的环境变量:
    echo 'setenv MY_VAR value' | sudo tee -a /etc/launchd.conf
    
    然后重启系统使更改生效。

6. 版本管理工具(如pyenv, rbenv)与系统路径冲突

问题: 安装了版本管理工具后,系统使用了错误版本的解释器。

解决方案:

  • 确保版本管理工具的初始化脚本正确添加到你的shell配置文件中。
  • 例如,对于pyenv,在~/.zshrc中添加:
    eval "$(pyenv init -)"
    
  • 确保这些初始化命令在PATH修改之后。

通过理解这些常见问题和解决方案,你可以更好地管理Mac中的环境变量,避免因配置错误而浪费宝贵的开发时间。

环境变量最佳实践

image.png

为了更有效地使用环境变量并避免潜在的问题,这里有一些最佳实践建议:

  1. 使用有意义的名称:
    选择清晰、描述性的名称for 环境变量。例如,使用DATABASE_URL而不是DB_CONN

    export DATABASE_URL="postgresql://user:password@localhost:5432/mydb"
    
  2. 避免敏感信息:
    不要在版本控制系统中存储包含敏感信息(如密码、API密钥)的环境变量。Instead,使用.env文件或专门的秘密管理工具。

    # .env file (不要提交到版本控制系统)
    API_KEY=your_secret_api_key
    
  3. 使用默认值:
    当使用环境变量时,提供默认值以增加代码的健壮性。

    # In a shell script
    ENVIRONMENT=${ENVIRONMENT:-development}
    
  4. 分组相关变量:
    使用前缀来组织相关的环境变量

    export APP_NAME="MyApp"
    export APP_VERSION="1.0.0"
    export APP_DEBUG="true"
    
  5. 文档化:
    记录你的环境变量,包括它们的用途、可能的值和默认值。

    # DATABASE_URL: The connection string for the database
    # Format: postgresql://user:password@host:port/dbname
    # Default: postgresql://localhost:5432/myapp
    export DATABASE_URL="postgresql://localhost:5432/myapp"
    
  6. 使用工具管理多环境:
    对于需要在不同环境(开发、测试、生产)之间切换的项目,考虑使用如direnv这样的工具。

  7. 定期审查和清理:
    定期检查你的环境变量,移除不再使用的变量。

  8. 使用类型安全的封装:
    在应用程序代码中,使用类型安全的方法来访问环境变量

    import os
    from typing import Optionaldef get_database_url() -> str:url = os.environ.get('DATABASE_URL')if url is None:raise ValueError("DATABASE_URL must be set")return urldef get_debug_mode() -> bool:return os.environ.get('DEBUG', 'false').lower() == 'true'
    
  9. 版本控制环境变量模板:
    虽然不应该在版本控制中包含实际的环境变量值,但是可以包含一个模板或示例文件。

    # .env.example
    DATABASE_URL=postgresql://user:password@localhost:5432/dbname
    API_KEY=your_api_key_here
    DEBUG=false
    
  10. 使用环境特定的配置文件:
    对于不同的环境,使用不同的配置文件。

    # .zshrc
    if [ -f ~/.zshrc_local ]; thensource ~/.zshrc_local
    fi
    

    然后,在每个环境中创建一个.zshrc_local文件,包含特定于该环境的设置。

通过遵循这些最佳实践,你可以创建一个更加健壮、安全和可维护的环境变量配置。这不仅可以提高你的开发效率,还可以减少由于环境配置错误而导致的问题。

高级技巧:使用direnv管理项目特定的环境变量

当你在多个项目之间切换工作时,管理项目特定的环境变量可能会变得复杂。这就是direnv发挥作用的地方。direnv是一个扩展shell的工具,它可以根据当前目录加载和卸载环境变量

安装direnv

在Mac上,你可以使用Homebrew来安装direnv:

brew install direnv

安装后,你需要在你的shell配置文件(如~/.zshrc)中添加以下行:

eval "$(direnv hook zsh)"

使用direnv

  1. 创建.envrc文件:
    在你的项目目录中创建一个.envrc文件:

    cd /path/to/your/project
    touch .envrc
    
  2. 添加环境变量:
    .envrc文件中添加你的项目特定的环境变量:

    export PROJECT_NAME="MyAwesomeProject"
    export DATABASE_URL="postgresql://localhost:5432/myproject"
    export API_KEY="your_secret_api_key"
    
  3. 允许direnv:
    首次创建或修改.envrc文件后,你需要显式地允许direnv加载它:

    direnv allow
    

现在,每次你进入这个项目目录时,这些环境变量就会自动加载。当你离开目录时,它们会自动卸载。

高级direnv用法

  1. 继承环境变量:
    你可以使用dotenv命令来加载.env文件:

    # .envrc
    dotenv .env
    
  2. 根据环境加载不同的配置:

    # .envrc
    if [ "$ENVIRONMENT" = "production" ]; thendotenv .env.production
    elsedotenv .env.development
    fi
    
  3. 添加目录到PATH:

    # .envrc
    PATH_add bin
    
  4. 设置项目特定的shell别名:

    # .envrc
    alias run="python manage.py runserver"
    
  5. 自动激活虚拟环境:

    # .envrc
    layout python3
    

通过使用direnv,你可以大大简化项目间的切换过程,确保每个项目都有正确的环境设置,而不会污染全局环境。

总结

在这篇文章中,我们深入探讨了Mac中环境变量的方方面面。我们学习了什么是环境变量,为什么它们如此重要,以及如何在Mac系统中查看、设置和管理它们。我们还讨论了常见问题及其解决方案,分享了一些最佳实践,并介绍了如何使用direnv这样的高级工具来管理项目特定的环境变量

理解和正确使用环境变量可以:

  • 提高开发效率
  • 增强应用程序的安全性
  • 简化配置管理
  • 使项目更易于在不同环境之间迁移

记住,环境变量是强大的工具,但也需要谨慎使用。始终遵循安全最佳实践,特别是在处理敏感信息时。定期审查和更新你的环境变量配置,确保它们始终符合你的需求。

最后,我鼓励你深入探索本文中提到的工具和技术。实践是掌握这些概念的最好方法。尝试在你的下一个项目中应用这些知识,你会发现它们如何改变你的开发工作流程。

通过掌握Mac中的环境变量,你将成为一个更高效、更专业的开发者。祝你编码愉快!


http://www.ppmy.cn/news/1525688.html

相关文章

SQLyou基础用法讲解

文章目录 SQLyog 基础知识讲解 1. 数据定义语言 (DDL)创建数据库创建表修改表删除表 2. 数据操作语言 (DML)插入数据批量插入数据更新数据条件更新删除数据条件删除 3. 数据查询语言 (DQL)查询数据查询所有数据使用排序使用聚合函数分组查询使用 HAVING 子句 4. 事务5. 索引创建…

idea一键自动化部署项目

文章目录 前言一、 IDEA插件安装1. 首先下载 Alibaba Cloud Toolkit 插件2. 插件下载完成后重启IDEA 二、SpringBoot项目准备1. pom.xml 文件2. controller3. 启动类 三、SpringBoot项目jar包部署1. Alibaba Cloud Toolkit 插件服务器配置2. 主机 IP、用户名、密码 点击测试链接…

Java的发展史与前景

🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 🌈C专栏:C 文章目录 0. Java语言的发展史1.概述1.1 什么是Java1.2 …

LSTM处理时序数据:深入解析与实战

大家好,我是你们的深度学习老群群。今天,我们来聊一聊LSTM(长短期记忆网络)是如何处理时序数据并得到预测结果的。LSTM作为循环神经网络(RNN)的一种变体,因其能够有效捕捉长期依赖关系&#xff…

Docker部署tenine实现后端应用的高可用与负载均衡

采用Docker方式的Tengine 和 keepalived 组合模式可以实现小应用场景的高可用负载均衡需求 目录 网络架构一、环境准备二、软件安装1. 下载Tenine镜像2. 下载Keepalived镜像3. 制作SpringBoot镜像 三、软件配置1. 创建应用容器2. 代理访问应用3. 创建Keepalived4. 测试高可用 网…

QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第三期]

QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第三期] 第三期介绍:频道模块之频道成员 目录 QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第三期]第三期介绍:频道模块之频道成员获取子频道在线成员数获取频道成员列表获取频道身份组成员列…

MySQL 查询过慢的优化方法

1. 优化查询语句 问题:使用 SELECT * 会导致查询获取不必要的数据。 SELECT * FROM users WHERE age > 30;优化建议: 指定需要的列,这样可以减少数据传输的负担,提升查询速度。 SELECT name, email FROM users WHERE age &g…

Windows与linux中docker的安装与使用

windos中安装使用docker 下载Docker_Desktop 安装包进入docker官网下载Docker_Desktop: https://www.docker.com/启用wsl 我们搜索“启用或关闭Windows功能”,打开后勾选适用于Linux的Windows 子系统 Docker_Desktop设置 出现Docker Engine stopp…

GC-分代收集器

GC收集器介绍 十款GC收集器 上图中共有十款GC收集器,它们可以根据回收时的属性分为分代和分区两种类型: 分代收集器:Serial、ParNew、Parallel Scavenge、CMS、Serial Old(MSC)、Parallel Old 分区收集器&#xff…

Java多线程编程-基础篇

多线程相关的概念 并发 并发是指在同一时间段内,两个或多个任务在同一个处理器上交替执行,使得在宏观上看起来像是同时进行。并发是通过快速切换任务来模拟同时执行的效果,实际上在任何一个时刻点上只有一个任务在执行。 也就是说&#xff0…

Linux 基础命令-文件权限与所有权

1. 文件权限概述 在Linux中,每个文件和目录都有与之关联的权限和所有权,来控制谁可以访问、修改或执行文件。文件权限与所有权可以防止未经授权的用户对文件进行访问或修改。 1.1 文件权限的组成 每个文件在Linux系统中都有三种类型的权限&#xff1a…

使用Ansible进行多云环境的自动化部署与管理

使用Ansible进行多云环境的自动化部署与管理 引言 随着云计算技术的飞速发展,多云环境已经成为现代企业IT架构的主流选择。多云环境不仅提供了更高的灵活性和可用性,还能有效降低供应商锁定的风险。然而,多云环境的管理和部署复杂性也随之增…

vue devtools的使用

vue devtools的使用 Vue Devtools 是一个强大的浏览器扩展,旨在帮助你调试和开发 Vue.js 应用。它支持 Chrome 和 Firefox 浏览器,并提供了一些工具和功能,可以让你更轻松地查看和调试 Vue 应用的状态和行为。以下是如何安装和使用 Vue Devtools 的详细指南。 安装 Vue De…

《Python青少年趣味编程108例》书籍介绍

文章目录 前言为什么选择Python?书籍介绍文章目录配套资源 前言 在这个数字化飞速发展的时代,编程已经成为了一项不可或缺的技能。对于青少年而言,学习编程不仅能够培养逻辑思维、解决问题的能力,还能激发无限创意,让…

【PyQt6 应用程序】一键视频解说克隆字幕切割版

在当今数字时代,视频解说已经成为影视剧宣传和观众互动的重要手段。然而,手动制作高质量的影视剧解说视频需要大量的时间和精力。为了简化这一过程并提高生产效率,我们开发了基于PyQt6的应用程序“一键视频解说克隆字幕切割版”。该应用程序能够自动复刻别人的影视剧解说视频…

概率论原理精解【13】

文章目录 在度量空间中,连续映射概述一、度量空间与距离函数二、连续映射的定义三、连续映射的等价定义四、连续映射的性质五、应用与例子 球形邻域刻画一、球形邻域的定义二、连续映射的球形邻域刻画三、等价性证明四、应用与例子 将度量空间上的连续映射推广到拓扑…

软件测试面试从哪方面面试?

一、面试基础题 简述测试流程: 什么是软件测试?软件测试的目的与原则 问:软件生存周期及其模型是什么? 什么是软件质量? 自动化测试脚本开发的主要步骤: 目前主要的测试用例设计方法是什么? 常见的测试用例设计…

二次规划及其MATLAB实现

引言 二次规划(Quadratic Programming, QP)是一类重要的优化问题,其目标函数为二次函数,约束条件为线性不等式或等式。二次规划问题在工程、经济、金融等领域有广泛应用,如投资组合优化、人脸表情动画的权重求解、机械…

后端开发刷题 | 把数字翻译成字符串(动态规划)

描述 有一种将字母编码成数字的方式&#xff1a;a->1, b->2, ... , z->26。 现在给一串数字&#xff0c;返回有多少种可能的译码结果 数据范围&#xff1a;字符串长度满足 0<n≤90 进阶&#xff1a;空间复杂度 O(n)&#xff0c;时间复杂度 O(n) 示例1 输入&a…

HJ36字符串加密

提示&#xff1a;文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问&#xff1a; 本文目标&#xff1a; 一、背景 最近 二、 2.1 HJ36字符串加密 解题 #include <stdio.h> #include <stdbool.h>int GetStrIndex(char c, char* dict, int len) {…