“Zsh”的版本间的差异
跳到导航
跳到搜索
(建立内容为“== 变量 == Zsh 变量无需加引号。如需要按照空格分割,使用 {{code|zsh|2=$=variable}} 或者 {{code|zsh|2=${=variable}<nowiki/>}}。 === 变…”的新页面) |
|||
(未显示同一用户的13个中间版本) | |||
第1行: | 第1行: | ||
+ | {{lowercase}} | ||
== 变量 == | == 变量 == | ||
Zsh 变量无需加引号。如需要按照空格分割,使用 {{code|zsh|2=$=variable}} 或者 {{code|zsh|2=${=variable}<nowiki/>}}。 | Zsh 变量无需加引号。如需要按照空格分割,使用 {{code|zsh|2=$=variable}} 或者 {{code|zsh|2=${=variable}<nowiki/>}}。 | ||
+ | |||
+ | 判断变量是否存在:{{code|zsh|$+variable}},为 1 即存在。判断 associative array 是否有某一个键:{{code|zsh|$+hash[key]}}。特别地,判断一个命令是否存在 | ||
+ | <syntaxhighlight lang=zsh> | ||
+ | (( $+commands[nvim] )) && echo 'nvim exists' | ||
+ | </syntaxhighlight> | ||
=== 变量展开选项 === | === 变量展开选项 === | ||
− | + | 形如 {{code|zsh|${(FLAG)variable}<nowiki/>}}。参考 <ref>[http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion-Flags 14.3.1 Parameter Expansion Flags]</ref>。也可打出 <code>${(</code> 然后按 <kbd>TAB</kbd> 查看补全信息。 | |
+ | |||
+ | ==== 常用选项 ==== | ||
− | + | ; <code>F</code>: 用换行符连接数组元素 | |
− | ; <code>F</code> | + | ; <code>j:''string'':</code>: 用 ''string'' 连接数组元素。如果 ''string'' 中包含 <code>:</code>,可将两个 <code>:</code> 换成其它字符,只要两字符相同。 |
− | : 用换行符连接数组元素 | + | ; <code>s:''string'':</code>: 用 ''string'' 分割变量内容 |
− | ; <code>j:''string'':</code> | + | ; <code>q</code>: 将特殊符号用反斜线 escape |
− | : 用 ''string'' 连接数组元素。如果 ''string'' 中包含 <code>:</code>,可将两个 <code>:</code> 换成其它字符,只要两字符相同。 | + | ; <code>q-</code>: 将特殊符号用单引号包裹 |
− | ; <code>s:''string'':</code> | + | ; <code>Q</code>: 去掉一层反斜线 escape |
− | : 用 ''string'' 分割变量内容 | + | ; <code>k</code>: 一个关系数组(associative array)的所有键(key) |
− | ; <code>q</code> | + | ; <code>kv</code>: 一个关系数组的键和值 |
− | : 将特殊符号用反斜线 escape | ||
− | ; <code>q-</code> | ||
− | : 将特殊符号用单引号包裹 | ||
− | ; <code>Q</code> | ||
− | : 去掉一层反斜线 escape | ||
− | ; <code>k</code> | ||
− | : 一个关系数组(associative array)的所有键(key) | ||
− | ; <code>kv</code> | ||
− | : | ||
− | === | + | ==== 例子 ==== |
− | + | ; {{code|zsh|${(j: :)${(q-)@}<nowiki/>}<nowiki/>}} | |
+ | : 将 shell 参数数组变为 escape 后的一个参数 | ||
− | == 数组 == | + | === 数组 === |
Zsh 数组下标从 1 开始。 | Zsh 数组下标从 1 开始。 | ||
第44行: | 第44行: | ||
array+=($ele) | array+=($ele) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | === 数组下标选项 === | ||
+ | |||
+ | 形如 {{code|zsh|$array[(FLAG)sub]}}。参考 <ref>[http://zsh.sourceforge.net/Doc/Release/Parameters.html#Subscript-Flags 15.2.3 Subscript Flags]</ref>。也可打出 <code>$a[(</code> 然后按 <kbd>TAB</kbd> 查看补全信息。 | ||
+ | |||
+ | ; <code>I</code>: 返回 <code>sub</code> 在数组 <code>$array</code> 中的最后一次出现的下标,不存在则返回 0 | ||
+ | ; <code>i</code>: 同上,不过返回的是第一次出现的下标 | ||
+ | |||
+ | 判断数组 <code>$path</code> 中是否含有 <code>/bin</code>: | ||
+ | <syntaxhighlight lang=zsh> | ||
+ | (( $path[(I)/bin] )) && echo '/bin is in $path' | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == 参数 == | ||
+ | |||
+ | 一些特殊的 zsh 变量,用于控制 zsh 的行为。另见 [https://man.archlinux.org/man/extra/zsh/zshparam.1.en <code>man zshparam</code>]。 | ||
+ | |||
+ | ; <code>WORDCHARS</code> | ||
+ | : 被视为 word 组成部分的字符,类似于 Vim 中的 <code>iskeyword</code> | ||
+ | : 我的配置:{{code|zsh|2=WORDCHARS="-"}} | ||
+ | ; <code>ZLE_SPACE_SUFFIX_CHARS</code> | ||
+ | : 在补全后可能会有后缀字符(如补全目录后的 <code>/</code>,补全一个参数后的空格),在后缀字符后输入此变量中字符时,后缀字符换成空格 | ||
+ | : 我的配置:{{code|zsh|<nowiki>ZLE_SPACE_SUFFIX_CHARS='&|'</nowiki>}} | ||
+ | : 如:在 <code>ls dir</code> 补全后变成 <code>ls dir/</code>,再输入一个 <code>|</code> 时命令行变成 <code>ls dir |</code> | ||
+ | |||
+ | == ZLE Functions == | ||
+ | |||
+ | <ref>[http://zsh.sourceforge.net/Doc/Release/Editor-Functions-Index.html Editor Functions Index]</ref> | ||
+ | |||
+ | ; <code>auto-suffix-remove</code> | ||
+ | : 如果存在,移除自动被加入的 suffix(如空格或 /) | ||
+ | ; <code>beginning-of-line</code> | ||
+ | : 移动到行首 | ||
+ | |||
+ | == 外部链接 == | ||
+ | |||
+ | * [https://blog.skk.moe/post/make-oh-my-zsh-fly/ 我就感觉到快 —— zsh 和 oh my zsh 冷启动速度优化 | Sukka's Blog] | ||
+ | |||
+ | == 参考资料 == | ||
+ | |||
+ | <references /> | ||
+ | |||
+ | [[Category:命令行]] |
2021年5月13日 (四) 23:40的最新版本
变量
Zsh 变量无需加引号。如需要按照空格分割,使用 $=variable
或者 ${=variable}
。
判断变量是否存在:$+variable
,为 1 即存在。判断 associative array 是否有某一个键:$+hash[key]
。特别地,判断一个命令是否存在
(( $+commands[nvim] )) && echo 'nvim exists'
变量展开选项
形如 ${(FLAG)variable}
。参考 [1]。也可打出 ${(
然后按 TAB 查看补全信息。
常用选项
F
- 用换行符连接数组元素
j:string:
- 用 string 连接数组元素。如果 string 中包含
:
,可将两个:
换成其它字符,只要两字符相同。 s:string:
- 用 string 分割变量内容
q
- 将特殊符号用反斜线 escape
q-
- 将特殊符号用单引号包裹
Q
- 去掉一层反斜线 escape
k
- 一个关系数组(associative array)的所有键(key)
kv
- 一个关系数组的键和值
例子
${(j: :)${(q-)@}}
- 将 shell 参数数组变为 escape 后的一个参数
数组
Zsh 数组下标从 1 开始。
在数组最前加入一个元素(prepend)
array=($ele $array)
在数组最后加入一个元素(append)
array=($array $ele)
# 或者
array+=($ele)
数组下标选项
形如 $array[(FLAG)sub]
。参考 [2]。也可打出 $a[(
然后按 TAB 查看补全信息。
I
- 返回
sub
在数组$array
中的最后一次出现的下标,不存在则返回 0 i
- 同上,不过返回的是第一次出现的下标
判断数组 $path
中是否含有 /bin
:
(( $path[(I)/bin] )) && echo '/bin is in $path'
参数
一些特殊的 zsh 变量,用于控制 zsh 的行为。另见 man zshparam
。
WORDCHARS
- 被视为 word 组成部分的字符,类似于 Vim 中的
iskeyword
- 我的配置:
WORDCHARS="-"
ZLE_SPACE_SUFFIX_CHARS
- 在补全后可能会有后缀字符(如补全目录后的
/
,补全一个参数后的空格),在后缀字符后输入此变量中字符时,后缀字符换成空格 - 我的配置:
ZLE_SPACE_SUFFIX_CHARS='&|'
- 如:在
ls dir
补全后变成ls dir/
,再输入一个|
时命令行变成ls dir |
ZLE Functions
auto-suffix-remove
- 如果存在,移除自动被加入的 suffix(如空格或 /)
beginning-of-line
- 移动到行首