小编Pou*_*ash的帖子

zsh 中 NUL 分隔词的下标变量扩展

我有 生成的数据file,它标识一个目录(或多个目录)中所有文件的 mime 类型。结果是一个列表,命令位于左侧,mime 类型位于右侧。默认情况下,这两个值(或字符串?)由冒号 (:) 分隔。我想用 NUL 字符将命令与其 mime 类型分隔开。所以,

files=( ${(f)"$(file --print0 --mime-type **/*)"} )

这似乎有效。

print -l ${files[@]}给出:

cs:           text/x-shellscript
da:           text/x-shellscript
dns-test:     text/x-shellscript
Run Code Online (Sandbox Code Playgroud)

或者,print -l ${(V)files[@]}给出:

cs^@:           text/x-shellscript
da^@:           text/x-shellscript
dns-test^@:     text/x-shellscript
Run Code Online (Sandbox Code Playgroud)

但是,当使用下标来匹配第一个单词时,输出是第一个字符。所以,

for f in "${files[@]}"; do
  print "${f[(pws:\0:)1]}"
done
Run Code Online (Sandbox Code Playgroud)

这仅打印每个数组元素的第一个字符(由 输出的每一行file):

c
d
d
Run Code Online (Sandbox Code Playgroud)

如果我省略 的规范(ps:\0:),从而使用默认的空格分隔,那么我确实会得到每个元素的第一个单词。所以,

for f in "${files[@]}"; do
  print "${f[(w)1]}"
done
Run Code Online (Sandbox Code Playgroud)

这有效:

cs
da
dns-test
Run Code Online (Sandbox Code Playgroud)

但我不想依赖空白。我想使用像 …

zsh

5
推荐指数
1
解决办法
165
查看次数

向变量追加和前置一个值(在 Fish shell 中或一般情况下)意味着什么?

根据命令的 Fish shell 文档set

append:将值附加变量的当前值集。这可以与--prepend一起使用来同时追加和前置。

prepend:将值添加变量当前值集的前面。这可以与--append一起使用以同时追加和前置。

在日常英语中,append是添加的意思,prepend是在开头添加的意思。显然,这些含义不适用于鱼(或一般的计算机?),因为说我们既可以将x 添加到 y,同时也可以将 x 添加到 y 的开头,这是多余的。如果我们能做到后者,那么我们就能做到前者。也就是说,通过做后者,我们就做了前者。如果说我既从起跑线开始比赛又参加比赛是没有意义的,那么说我既在前面添加一些数据又在附加该数据也是没有意义的。

那么,这些术语对钓鱼(或在软件开发领域)意味着什么?做其中一项而不是另一项会有什么影响?明确地同时执行这两项操作意味着什么?

programming fish

-1
推荐指数
1
解决办法
3576
查看次数

标签 统计

fish ×1

programming ×1

zsh ×1