Elvish脚本入门:变量与循环详解

Elvish脚本入门:变量与循环详解

elvish Elvish = Expressive Programming Language + Versatile Interactive Shell elvish 项目地址: https://gitcode.com/gh_mirrors/el/elvish

前言

在Elvish脚本编程中,变量和循环是构建自动化任务的基础。本文将深入探讨如何在Elvish中使用这些核心概念,帮助读者编写更灵活、更高效的脚本。

变量基础

变量引用

Elvish中使用$符号引用变量值。例如,获取平台信息:

use platform
echo $platform:os  # 输出操作系统类型
echo $platform:arch  # 输出CPU架构

变量定义

使用var命令定义新变量:

var archive-url = https://dl.elv.sh/$platform:os'-'$platform:arch/elvish-HEAD.tar.gz

注意定义变量时不需要$前缀,只有在引用变量值时才需要。

字符串拼接技巧

当拼接变量与字符串时,需要注意变量名边界:

# 正确方式:使用引号明确边界
echo $platform:os'-'$platform:arch

# 错误方式:连字符会被误认为变量名的一部分
echo $platform:os-$platform:arch

Elvish的语法高亮会帮助区分变量和普通字符串。

循环结构

基本for循环

处理多个文件时,for循环非常有用:

for jpg [banana.jpg unicorn.jpg] {
    var avif = (str:trim-suffix $jpg .jpg).avif
    gm convert $jpg $avif
}

通配符扩展

使用通配符处理多个文件:

for jpg [*.jpg] {
    var avif = (str:trim-suffix $jpg .jpg).avif
    gm convert $jpg $avif
}

*通配符可以匹配任意数量的字符,使脚本能处理不确定数量的文件。

多值处理

多值输出

Elvish命令可以输出多个值:

put *.jpg
# 输出示例:
# ▶ banana.jpg
# ▶ unicorn.jpg

字符串分割

str:split命令将字符串分割为多个值:

str:split , friends,Romans,countrymen
# 输出:
# ▶ friends
# ▶ Romans
# ▶ countrymen

多值捕获

捕获命令输出时,每行成为一个独立值:

for url [(curl -s https://dl.elv.sh/INDEX)] {
    echo 'URL: '$url
}

列表操作

列表与多值转换

列表可以存储多个值,但本身是一个单一值:

# 多值转为列表
var mylist = [foo bar]

# 列表展开为多值
all $mylist
# 或使用简写
put $@mylist

实际应用示例

平台无关的下载脚本

var archive-url = https://dl.elv.sh/$platform:os'-'$platform:arch/elvish-HEAD.tar.gz
curl -s -o elvish-HEAD.tar.gz $archive-url
curl -s $archive-url.sha256sum

批量图片转换

use str
for jpg [*.jpg] {
    var avif = (str:trim-suffix $jpg .jpg).avif
    gm convert $jpg $avif
}

总结

掌握Elvish中的变量和循环是编写高效脚本的基础。通过本文介绍的技术,你可以:

  1. 使用变量存储和引用数据
  2. 利用循环处理重复任务
  3. 灵活处理多值和列表
  4. 编写适应不同环境的可移植脚本

这些概念为学习更高级的Elvish特性奠定了基础,后续可以进一步探索管道、IO操作等主题。

elvish Elvish = Expressive Programming Language + Versatile Interactive Shell elvish 项目地址: https://gitcode.com/gh_mirrors/el/elvish

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆滔柏Precious

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值