如何在zsh中获取多行字符串,并将其拆分为每个单行的字符串数组?
具体来说,我想取cal的输出
June 2010
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Run Code Online (Sandbox Code Playgroud)
把它变成
(" June 2010 " "Su Mo Tu We Th Fr Sa" " 1 2 3 4 5" " 6 7 8 9 10 11 12" "13 14 15 16 17 18 19" "20 21 22 23 24 25 26" "27 28 29 30")
Run Code Online (Sandbox Code Playgroud)
这是一个zsh数组.
我的最终目标是接受另一个命令的输出并将它们并排放置,所以如果我有的话
a
b
c
Run Code Online (Sandbox Code Playgroud)
和
d
e
f
Run Code Online (Sandbox Code Playgroud)
我最终会
a d
b e
c f
Run Code Online (Sandbox Code Playgroud)
这是一个可以在zsh和Bash中使用的进程替换示例.它使用Unix/Linux工具paste将两个日历并排放置作为演示.
$ paste <(cal 6 2009) <(cal 6 2010)
June 2009 June 2010
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 1 2 3 4 5
7 8 9 10 11 12 13 6 7 8 9 10 11 12
14 15 16 17 18 19 20 13 14 15 16 17 18 19
21 22 23 24 25 26 27 20 21 22 23 24 25 26
28 29 30 27 28 29 30
Run Code Online (Sandbox Code Playgroud)
直接回答你的问题:
saveIFS=$IFS; IFS=$'\n'; array=($(cal 6 2010)); IFS=$saveIFS
Run Code Online (Sandbox Code Playgroud)
哪个也适用于Bash.
在zsh中,您可以输入
array=( ${(s.
.)"$(cal)"} )
Run Code Online (Sandbox Code Playgroud)
或者,与eval一起:
eval $'array=( ${(s.\n.)"$(cal)"} )'
Run Code Online (Sandbox Code Playgroud)
这里(s.smth.)指定要分割的表达式(没有模式,只有固定的字符串。与IFS不同,(s.:::.)将分割为:::,而IFS=':::'分割为:)。eval用于将换行符放入(s)标记内,因为该(s.\n.)方法在反斜杠上分割,后跟字母“ n”。
| 归档时间: |
|
| 查看次数: |
2752 次 |
| 最近记录: |