首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在zsh中创建可以接受乱序参数的脚本?

在zsh中创建可以接受乱序参数的脚本,可以通过使用特殊的位置参数变量来实现。zsh支持多种位置参数变量,如$1, $2, $3等,以及$@$*来表示所有参数。为了处理乱序参数,你可以使用关联数组(associative arrays)来存储参数及其值,然后根据需要进行处理。

以下是一个简单的示例脚本,它接受任意数量的参数,并将它们存储在一个关联数组中,以便后续处理:

代码语言:txt
复制
#!/bin/zsh

# 创建一个关联数组来存储参数
typeset -A params

# 遍历所有位置参数
for arg in "$@"; do
  # 假设参数是以'key=value'的形式提供的
  if [[ $arg =~ ^([^=]+)=(.*)$ ]]; then
    key=$match[1]
    value=$match[2]
    params[$key]=$value
  else
    echo "参数格式错误: $arg"
    exit 1
  fi
done

# 输出所有参数及其值
for key in ${(k)params}; do
  echo "$key -> ${params[$key]}"
done

在这个脚本中,我们使用了正则表达式来检查每个参数是否符合key=value的格式,并将其存储在关联数组params中。之后,我们可以按照键来访问这些参数的值。

优势

  • 灵活性:关联数组允许你以任意顺序处理参数。
  • 可读性:通过键值对的形式,参数的意义更加明确。
  • 扩展性:可以轻松地添加新的参数处理逻辑。

应用场景

  • 配置文件解析:当脚本需要读取配置文件中的键值对时。
  • 命令行工具:构建支持多种选项和参数的命令行工具。
  • 自动化脚本:在自动化任务中处理不同的输入条件。

注意事项

  • 确保参数格式正确,否则脚本可能会报错。
  • 如果参数中包含特殊字符,可能需要进行适当的转义处理。

通过这种方式,你可以创建一个健壮的脚本,能够处理各种乱序参数的情况。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

写给前端同学的终端修炼手册

我们可以参考此篇文章 - 如何在 Windows 10 上安装和使用 Zsh[4] 一旦设置完成,我们就可以配置终端应用程序使用 Bash 或 Zsh。...echo 命令非常类似于JavaScript中的 console.log 函数。 和函数一样,命令接受参数。在这种情况下,echo 接受一个参数,即要输出的字符串。...❝它本质上是一个符号,表示“这里的内容是要在终端中运行的!” 即使在许多现代shell语言如Zsh中不再使用$作为提示符字符,这种符号的意义仍然保留了下来。...例如:MY_VAR="Front789"echo 特殊变量: $0:当前脚本的文件名。 1, 2, ...:传递给脚本或函数的参数。 $#:传递给脚本或函数的参数数量。 $?...Bash 和 Zsh 支持别名,这是一种创建自定义快捷方式的方法。例如,我们可以设置一个别名,这样每当输入 hi 时,它会自动运行 echo "Front789!"

14510

Linux 如何更改默认 Shell

有时候,我们可能需要更换用户的默认Shell,原因多种多样,比如个人喜好或者需要其他Shell提供的特殊功能。 本文[1]将介绍如何在 Linux 中更换用户的默认Shell。...所谓的Shell,其实是一个接受和解释命令的程序;Linux 上有多种开源Shell,比如 bash、sh、ksh、zsh、fish,以及许多其他不太为人知的Shell。...使用一个Shell包装脚本或程序,在命令被发送到Shell执行之前记录用户命令。在这种情况下,你可以将Shell包装指定为用户的登录Shell。...在使用 useradd 或 adduser 工具创建用户账户时,可以通过 --shell 标志来指定用户登录Shell的名称,而不是使用配置文件中指定的默认名称。...和其他软件包一样,流行的Shell,如 Zsh 和 Fish,可以从你的操作系统的软件仓库中轻松安装,如下所示。

7200
  • Linux上后台保持Terminal交互运行的两种方式

    noup的使用 有了&参数,接下来,我们使用nohup就可以后台运行了: # zsh aria2Strat.sh为我用zsh启动Aria2 nohup zsh aria2Strat.sh & [后台运行...后台运行 如果,我们的脚本或程序,即没有守护线程,也没有SIGHUP信号呢?...其实还是有两种方法,首先看Noup的选择参数: disown:在sh中,可以通过disown -h job名忽略 SIGHUP 信号;disown命令将移除job表中特定的job,这也意味着该job不再接受任何信号...回到这个后台进程,输入: fg %1 disown参数 如果Control+Z方法不行,我们可以使用disown参数: nohup zsh aria2Start.sh & disown [disown参数...创建好后: [虚拟终端] 在这个界面,运行程序即可: [运行程序] 之后,按Control+a进入screen的指令接受,再按d即可回到主终端。这个时候,关闭终端,Aria2也不会停止运行。

    8.4K10

    命令行解释器:ZSH 和 Bash,你更爱用哪个?

    以下是ZSH的一些主要功能: 自动补全:ZSH提供强大的自动补全功能,可以根据命令历史和当前上下文智能地补全命令、文件名和参数。...插件和主题:ZSH支持插件和主题,可以扩展其功能和外观,并根据个人喜好进行定制。 强大的别名功能:ZSH允许用户创建复杂的别名和快捷方式,以提高工作效率。...Bash功能 Bash(Bourne Again Shell)是许多Linux和Unix系统默认的命令行解释器,具有以下一些主要功能: 脚本编写:Bash是一个功能强大的脚本语言,可以编写自动化任务和脚本程序...以下是ZSH的一些可定制性特点: 插件:ZSH拥有丰富的插件生态系统,用户可以根据自己的需要选择并使用各种插件,如语法高亮、自动补全、目录导航等。...主题:ZSH支持自定义主题,用户可以选择喜欢的外观。 自动补全:ZSH提供了强大的自动补全功能,可以根据上下文智能地补全命令、文件名和参数。

    3.1K20

    QNAP安装Entware

    本篇内容可以让你学会如何在QNAP上安装Entware-ng,以及zsh,git,sudo还有ohmyzsh等常用工具,并且保证他们不会被系统还原!...安装 想要在你的QNAP上安装Entware,可以访问Qnapclub Store - Entware-ng,找到对应的架构的下载地址。...因为每次重启时,文件系统就会被还原,所以我们需要在系统加载的时候HACK一下,通过观察挂载的规则,老高发现/etc/init.d/Entware.sh这个脚本可以为我所用,所以后面我们就改一下这个脚本!...的配置放在硬盘中,否则重启就会被删除 # 这里假设硬盘路径为/share/CACHEDEV1_DATA/ mkdir -p /share/CACHEDEV1_DATA/.zsh cd ~ mv .zsh_history...vi /share/CACHEDEV1_DATA/.qpkg/Entware/Entware.sh ## 找到start位置,在创建link的时候加入以下代码 /bin/ln -sf /share/

    3K20

    Shell中傻傻分不清楚的TOP3

    在UNIX或Linux系统中,Shell即是用户交互的界面,也是控制系统的脚本语言。当然现在用户也可以选择图形化界面做一些和操作系统的交互。层次示意图如下: ?...一般发行版的Linux系统中,默认的shell程序就是bash。我们在写shell脚本时,通常也会在脚本文件头部指定bash作为脚本解释器。 ? 这里多说一句,zsh有时也作为猿媛们的默认shell。...另外,在开启一个shell进程中,有一些参数的值也会影响到配置文件的加载。如--rcfile ,--norc等。这些参数的含义值可以使用man bash进一步了解。...如centos7.2 中 ~/.bash_profile文件中实际调用了 ~/.bashrc文件。 ? 按照模式和参数设置启动的shell程序的配置文件加载流程图如下: ?...系统变量 Shell中系统变量主要在对参数判断和命令返回值判断时使用,包括脚本和函数的参数和返回值判断。没啥可说的,主要难记且脚本中经常出现: ?

    73430

    Mac 自动加载sshkey

    在 Zsh 中自动运行 ssh-add 以便在登录时自动添加 SSH 密钥,可以在 ~/.zshrc 文件中添加相关配置。...下面是一个示例,展示如何在 Zsh 会话启动时自动运行 ssh-add 并添加所有默认位置的 SSH 密钥。...fi } # 在 zsh 启动时调用 start_ssh_agent start_ssh_agent 这段脚本会在 Zsh 启动时检查 SSH_AUTH_SOCK 变量是否为空,如果为空则启动 ssh-agent...SSH_AUTH_SOCK 是环境变量,它存储了 ssh-agent 创建的 UNIX 域套接字的路径。如果该变量已经存在,说明 ssh-agent 已经在运行,并且可以直接使用。...通过这种方式,你可以确保在每次启动 Zsh 会话时,只有在没有运行 ssh-agent 的情况下才会启动新的 ssh-agent 实例,并添加 SSH 密钥。

    9210

    LinuxMac如何配置ZSH并使用Oh-my-zsh?让你的终端更加实用、美观

    传统的shell(如:Bash),命令和显示的文字以单色为主;而ZSH不仅支持彩色字体,还支持命令填充: [ZSH的彩色提示] 原本需要输入路径全面,现在zsh可以通过按Tab键来自动填充: [按Tab...可以使用我配置的脚本: zsh -c "$(curl -fsSL 'https://host.mintimate.cn/fileHost/download/MTM1NjkzNzI1OTIxMDg0NjIwOQ...(如果没有~/.zshrc文件,可以手动创建) 重启终端或终端输入source ~/.zshrc使配置生效 不是很建议普通用户使用手动配置去配置Oh-my-zsh。 3....编辑~/.zshrc这个ZSH配置文件,进行更改: # 使用vim编辑ZSH配置文件 vim ~/.zshrc 修改皮肤参数: [修改皮肤参数] 为一般喜欢steeef主题: [换为steeef主题]...[输入cd Dow后按Tab自带填充] 其实,ZSH的自动填充,不但可以填充目录,还可以: 填充命令,如:Git命令填充。

    8.1K72

    树莓派折腾记:安装并配置zsh

    文章更新   20170328 初次成文   20170417 更正了有关Autojump的内容 问题提出:   今天小苏要为大家介绍的是如何在树莓派上安装和配置zsh,zsh和系统默认的bash一样...在写这篇文章之前,小苏拿"树莓派 zsh"做关键词在Google上搜索了一下,搜索结果中似乎没有文章能比较系统地介绍如何在树莓派上安装和配置树莓派,所以干脆自己写一篇喽~   正文开始(以下内容默认针对于树莓派的默认用户...自动配置脚本   执行此命令后,脚本将会下载zsh所需的资源和配置文件至~/oh-my-zsh/目录,并将根据你的系统环境变量完成对zsh的配置。   ...接着,我们可以执行以下命令将zsh切换为此用户的默认Shell(可能需要pi用户的密码): chsh -s /bin/zsh #无需加sudo   退出终端并再次登录终端,这时命令指示符应该有变化了.../install.py #执行安装脚本,安装Autojump   在脚本执行结果的末尾,你将会看到类似这样的内容(实际内容可能不一样): [[ -s /home/pi/.autojump/etc/

    2.9K20

    rpm包管理基础

    zsh        # 查询zsh依赖的其他软件包 rpm -q --scripts zsh         # 查询zsh 包含的脚本【安装、卸载时候会调用这些脚本】 另外,加上 -p参数适用于尚未安装的软件包的信息查询...,如: 【注意加上-p参数后,后面接的是必须是完整的包名称】 rpm -qpi httpd-2.2.15-39.el6.centos.x86_64.rpm           # 查询httpd软件包的详细信息...可以加上下面的选项: --nodigest        # 读取时不校验打包或头部校验【如:rpm -ivh --nodigest xxx.rpm】 --nosignature   # 读取时不校验打包或头部签名...【卸载httpd.2.2.19.rpm,只要写rpm -e httpd即可】 卸载过程中还有几个可选参数, --nodeps 如rpm -ivh --nodeps httpd.2.1.3-12.rpm...--test 如rpm -ivh --test xxx.rpm        表示仅测试软件包的安装情况,不实际卸载 --noscripts        表示不执行rpm安装过程的脚本,不建议使用该参数

    95230

    如何在CLI上管理密码

    该密码工具实际上是一个shell脚本编写的前端,其中调用了几个其它工具(如gpg,pwgen,git,xsel)来使用OpenGPG管理用户的密码信息。...首先,通过以下步骤创建一个GPG密钥对(即:公钥/私钥)。如果已经创建了自己的GPG密钥对,可以跳过此步骤。 $ gpg --gen-key 执行该步骤,会询问你如下问题。...如果你不确定,可以选择接受默认回答。作为密钥生成部分,你将要为你的密钥创建一个加密口令,这个口令实际上是你访问存储在本地密码仓库中的任何密码信息时的主密码。...成功创建密钥对后,创建的密钥对会存储在~/.gnupg目录中。 接下来,运行以下命令来初始化本地密码仓库。下面的,输入之前创建密钥对时的关联电子邮件地址。...在终端使用pass管理密码 插入新密码信息 要将新的密码信息插入到本地密码仓库中,请遵循以下命令格式: $ pass insert 是你定义的专有名称,并且可以分级(如

    2K110

    Linux shell 中的极品!高效的命令行~

    本文是关于如何在Ubuntu 20.04上安装和配置ZSH。此步骤适用于所有基于Ubuntu的发行版。ZSH代表Z Shell,它是类Unix操作系统的shell程序。...在Ubuntu Linux上安装Zsh 在Ubuntu中可以使用apt包管理器和从源代码安装ZSH两种方法 我们将使用apt软件包管理器在Ubuntu上安装ZSH。...现在要使用新的zsh shell,请从终端注销并再次登录。 在Ubuntu Linux中设置Zsh 与BASH之类的其他shell相比,ZSH需要一些首次配置才能解决。...按1,它将带您配置与历史相关的参数,如保留多少历史行和历史文件的位置。...我们可以选择选项“2”,它将用默认参数填充.zshrc文件,而不是选择选项“1”到主菜单设置每个设置。我们可以直接在.zshrc文件中更改参数。

    2.7K20

    一篇文章,四种方法教你在Linux上安装MariaDB

    首先,SSH连接我们的服务器,这里使用腾讯云轻量应用服务器,并安装了ZSH、配置了oh-my-zsh(目的是为了更方便操作Terminal,如果你也厌倦了Bash的操作,参考文章:Linux/Mac如何配置...ZSH并使用Oh-my-zsh?...另外,如果你的Linux设备是多核,可以加上-j参数以加快编译速度,比如我的是腾讯云轻量应用服务器4核服务器: make -j 4 [加速编译] [编译完成] 编译没问题,我们直接安装即可: make...设置参数 初始化完成后,需要设置my.cnf文件,早期版本的MySQL和MariaDB都有提供my.cnf为模版,现在已经没有提供,需要手动创建,我们使用vim手动创建到/etc下。...vim /etc/my.cnf 我的配置文件参考(更多参数,可以看官方文档): # Begin /etc/mysql/my.cnf # The following options will be passed

    8.7K102

    DevContainer高效开发(第二篇):前端开发体验

    node 开发环境,可以在 vscode 中开发。...等安装完之后,就可以在 vscode 中开发了,这时你会发现,vscode 中的 terminal 已经变成了 docker 中的 terminal,你可以在里面运行 node 命令了 (7)下次打开容器...我推荐的是轻量版 slim 版本,需要用到啥工具,自己去安装就好了,docker 的难度在于 shell 脚本能力,所以自己用啥自己去安装,提升自己 shell 脚本能力。...所以不要直接在 workspaces/你的目录名 目录下进行开发,而是你执行一个工作目录 /root/uccs,这个目录必须提前创建,可以写在 Dockerfile 中 (3) shutdownAction...操作 (4) postCreateCommand: 容器创建后执行的命令,只会在容器创建的时候执行一次,可以用来安装一些工具,比如 pnpm install (5) postStartCommand:

    82510

    antigen简介

    有些同学可能听说过zshell和oh-my-zsh,前者是一个shell程序,由于功能比较强大,所以叫做z shell,意为终极shell;而后者是一个模板化的zshell配置脚本,通过它我们可以快速配置一个好用的...用法 快速配置 假如你之前使用了oh-my-zsh,在这里可以先把原来的oh-my-zsh和zshrc文件删掉,然后创建一个新的.zshrc文件,内容如下。...如果你有了一些稳定的插件,就可以用这个命令将这些插件保存到antigen配置文件中,之后的加载过程会有很大的性能提高。...antigen list 该命令用于列出所有安装的插件,可以使用三个参数指定如何显示。...如果antigen位于git仓库中,该命令会执行git pull操作,否则就什么也不做。不过这时候我们仍然可以用前面介绍的方法直接下载脚本。 antigen help 该命令会列出帮助信息。

    1.2K30

    Cobra 命令自动补全指北

    前言 用过类 Unix 系统中 Unix shell(Shell/Bash/Zsh) 的同学都应该对 TAB 键印象深刻,因为它可以帮忙补全或提示后续的命令,用户不用记住完整的命令,只需输入前几个字符...zsh) 加入 .zshrc 文件中,就可以在每次启动 shell 时自动加载自动补全脚本,之后就可以体验到与原生 shell 相同的自动补全功能了。...使用如下命令,即可生成用于命令自动补全的代码: $ cobra add completion 或者也可以创建 cmd/completion.go 文件,来放置用于生成命令自动补全脚本的代码: var completionCmd...这里就需要用到自定义补全,通过为每个命令增加不同的参数或方法,可以实现静态和动态补全等功能。...当然 Cobra 还不是完美的,比如生成的 Zsh 脚本有些问题,kubectl 和 helm 都是使用将其生成的 Bash 自动补全脚本转化为 Zsh 的自动补全脚本的方式。

    2.7K20

    在 Windows 下使用 WSL2 搭建 Kubernetes 集群

    本文我们将介绍如何在 Windows10 下使用 WSL2 和 KinD 来搭建一套 Kubernetes 集群。在过去几年,Kubernetes 已经成为了容器编排领域事实上的标准。...,比如将终端替换成 zsh: # 安装 zsh root@k8s:~# apt-get install zsh oh-my-zsh可以用于快速配置zsh,进入官网或者 Github 可以了解其基本使用及其丰富的主题使用...首先安装 Systemd 相关的依赖: apt install -yqq fontconfig daemonize 然后创建一个如下所示的脚本文件: # Create the starting script...到这里集群就创建成功了,我们也可以在 Windows 的浏览器中打开上面的 Kubernetes master 地址: ?...安装成功后,我们可以使用如下命令创建一个临时的代理: $ kubectl proxy 然后在 Windows 浏览器中我们可以通过如下地址来访问 Dashboard 服务: http://localhost

    15.2K362

    在 Windows 下使用 WSL2 搭建 Kubernetes 集群

    本文我们将介绍如何在 Windows10 下使用 WSL2 和 KinD 来搭建一套 Kubernetes 集群。在过去几年,Kubernetes 已经成为了容器编排领域事实上的标准。...,比如将终端替换成 zsh: # 安装 zsh root@k8s:~# apt-get install zsh oh-my-zsh可以用于快速配置zsh,进入官网或者 Github 可以了解其基本使用及其丰富的主题使用...首先安装 Systemd 相关的依赖: apt install -yqq fontconfig daemonize 然后创建一个如下所示的脚本文件: # Create the starting script...到这里集群就创建成功了,我们也可以在 Windows 的浏览器中打开上面的 Kubernetes master 地址: ?...安装成功后,我们可以使用如下命令创建一个临时的代理: $ kubectl proxy 然后在 Windows 浏览器中我们可以通过如下地址来访问 Dashboard 服务: http://localhost

    2.8K20

    蓝桥ROS云课一键配置f1tenth和PID绕圈(竞赛更新版)

    但是,有几个需要注意的地方: 该脚本是为Zsh shell编写的,如果使用的是Bash shell,则~/.zshrc应改为~/.bashrc。...该脚本可能需要特定的用户权限(如sudo)来执行某些命令,确保执行脚本的用户有足够的权限。...定义PID控制参数和墙壁跟随参数 代码中定义了一些PID控制参数(kp、kd、ki)以及墙壁跟随参数(如角度范围、期望的左右距离、速度等)。...getRange方法 getRange方法用于从激光雷达数据中获取特定角度范围内的距离。它接受两个参数:激光雷达数据和角度。...它接受误差和速度作为输入,并计算出应该应用的角度。然而,这个方法的实现也是不完整的,只提供了PID控制算法的基本框架,具体的实现细节(如如何计算积分项、如何应用PID参数等)还需要进一步补充。

    15700

    kubectl 高效使用技巧

    命令补全功能使你可以使用 Tab 键自动完成 kubectl 命令的各个部分。这适用于子命令、选项和参数,包括诸如资源名称之类难以键入的内容。命令补全可用于 Bash 和 Zsh Shell。...Kubectl 可以使用以下命令为 Bash 和 Zsh 自动生成并 print out 补全脚本: kubectl completion bash # or kubectl completion zsh...Zsh Zsh 的补全脚本没有任何依赖项,所以配置要简单很多,我们可以通过添加以下命令到你的 ~/.zshrc 文件中来实现这一效果: source zsh)...),它同时显示资源名称的缩写(如 deploy),这些名称对于 kubectl 都是等效的,我们可以使用它们中的任何一个。...可执行文件可以是任何类型,可以是 Bash 脚本、已编译的 Go 程序、Python 脚本,这些类型实际上并不重要。唯一的要求是它可以由操作系统直接执行。 让我们现在创建一个示例插件。

    1.4K20
    领券