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中的变量和循环是编写高效脚本的基础。通过本文介绍的技术,你可以:
- 使用变量存储和引用数据
- 利用循环处理重复任务
- 灵活处理多值和列表
- 编写适应不同环境的可移植脚本
这些概念为学习更高级的Elvish特性奠定了基础,后续可以进一步探索管道、IO操作等主题。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考