我有 生成的数据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)
但我不想依赖空白。我想使用像 …
append:将值附加到变量的当前值集。这可以与--prepend一起使用来同时追加和前置。
prepend:将值添加到变量当前值集的前面。这可以与--append一起使用以同时追加和前置。
在日常英语中,append是添加的意思,prepend是在开头添加的意思。显然,这些含义不适用于鱼(或一般的计算机?),因为说我们既可以将x 添加到 y,同时也可以将 x 添加到 y 的开头,这是多余的。如果我们能做到后者,那么我们就能做到前者。也就是说,通过做后者,我们就做了前者。如果说我既从起跑线开始比赛又参加比赛是没有意义的,那么说我既在前面添加一些数据又在附加该数据也是没有意义的。
那么,这些术语对钓鱼(或在软件开发领域)意味着什么?做其中一项而不是另一项会有什么影响?明确地同时执行这两项操作意味着什么?