我想创建一个 mp3 文件列表,例如a 1.mp3|a 2.mp3
.
我已经尝试过echo ${(j:|:)$(echo *.mp3)}
它的一些变体,但它们不起作用:
# too much splitting
01|The|Magic|Finger|01.mp3|02|The|Magic|Finger|02.mp3|03|The|Magic|Finger|03.mp3|04|The|Magic|Finger|04.mp3|05|The|Magic|Finger|05.mp3|06|The|Magic|Finger|06.mp3
# too much quoting
01 The Magic Finger 01.mp3 02 The Magic Finger 02.mp3 03 The Magic Finger 03.mp3 04 The Magic Finger 04.mp3 05 The Magic Finger 05.mp3 06 The Magic Finger 06.mp3
我不想为此创建函数或变量。(可以轻松完成。)
获取 mp3 文件列表,将它们传递给
echo
它以便打印它们以空格分隔,然后通过管道传输该输出,读取它,在空格/制表符/换行符/NUL 上拆分,然后使用|
.要么做:
或者
如果目的是将其用作
zsh
模式,您可能希望转义这些文件名称中的通配符。这是通过b
参数扩展标志完成的:我找到了一种方法来做到这一点,但对于这样一个简单的用例来说,它仍然相当复杂:
echo ${(j:|:)"${(@f)$(print -l *.mp3)}"}
您可以使用
set
将这些文件整合到位置参数中,然后"$*"
使用所需的字段分隔符来扩展它们:请注意,这是在子 shell 中完成的,因此对 IFS 的更改不会影响您当前的 shell。