forked from aqzt/kjyw
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patharray1.sh
78 lines (61 loc) · 1.93 KB
/
array1.sh
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/bash
##############
##Author: yul1
##Date: 2019-09-13 11:29:25
##LastEditors: yul1
##LastEditTime: 2019-09-13 12:03:10
##Description:
##############
#在示例中,行分隔符(第1维)是空格字符。为了引入字段分隔符(第二维),使用标准unix工具tr。用于附加尺寸的附加分隔符可以以相同的方式使用。
#当然,这种方法的性能不是很好,但是如果性能是不是一个标准,这种做法是非常通用的,可以解决很多问题:
array2d="1.1:1.2:1.3 2.1:2.2 3.1:3.2:3.3:3.4"
function process2ndDimension {
for dimension2 in $*
do
echo -n $dimension2 " "
done
echo
}
function process1stDimension {
for dimension1 in $array2d
do
process2ndDimension `echo $dimension1 | tr : " "`
done
}
process1stDimension
##该样品的输出是这样的:
##1.1 1.2 1.3
##2.1 2.2
##3.1 3.2 3.3 3.4
#!/bin/bash
##提取控制台上w命令给出的:USER,TTY和FROM值.在bash中我试图获取此输出并将这些值放入多维数组(或只是一个带空格分隔符的数组).
w|awk '{if(NR > 2) print $1,$2,$3}' | while read line
do
USERS+=("$line")
echo ${#USERS[@]}
done
echo ${#USERS[@]}
#!/bin/bash
USERS=()
shopt -s lastpipe
w | awk '{if(NR > 2) print $1,$2,$3}' | while read line; do
USERS+=("$line")
done
echo ${#USERS[@]}
##可以使用process substitution而不是管道,以便read命令在主shell进程中运行.
#!/bin/bash
USERS=()
while read line; do
USERS+=("$line")
done < <(w | awk '{if(NR > 2) print $1,$2,$3}')
echo ${#USERS[@]}
##可以使用可移植方法,该方法适用于没有进程暂停或ksh / zsh行为的shell,例如Bourne,dash和pdksh. (对于数组,您仍然需要(pd)ksh,bash或zsh.)运行需要管道内管道数据的所有内容.
#!/bin/bash
USERS=()
shopt -s lastpipe
w | awk '{if(NR > 2) print $1,$2,$3}' | {
while read line; do
USERS+=("$line")
done
echo ${#USERS[@]}
}