回答編集履歴

2

説明を修正

2021/03/15 04:38

投稿

Daregada
Daregada

スコア11990

test CHANGED
@@ -1,3 +1,31 @@
1
+ 後出しで、「`:`以降にも`[`や`]`がある」ことが判明したので、シェルの文字列置換機能では対応しきれなくなった。sedなどの文字列置換機能を持つツールを使う必要がある。
2
+
3
+
4
+
5
+ ```bash
6
+
7
+ #/bin/bash
8
+
9
+ target="[説明]:ここは説明です。[色]:お勧めは[黒]です。[サイズ]:ここはサイズです。"
10
+
11
+ #lst=(${target//[/ [})
12
+
13
+ lst=($(echo "$target" | sed -e "s/[[^]]*]:/ &/g"))
14
+
15
+ echo "total:" ${#lst[@]}
16
+
17
+ for v in "${lst[@]}"; do
18
+
19
+ echo "$v"
20
+
21
+ done
22
+
23
+ ```
24
+
25
+
26
+
27
+ 以下、修正前の回答:
28
+
1
29
  bashの文字列置換機能を使って、`[`を` [`に全置換した文字列を生成し、配列の初期値に指定する。
2
30
 
3
31
 
@@ -33,27 +61,3 @@
33
61
  [サイズ]:ここはサイズです。
34
62
 
35
63
  ```
36
-
37
-
38
-
39
- zshの場合は、変数展開部分にちょっと修正が必要。同じ結果を得るには次のようにする。
40
-
41
-
42
-
43
- ```zsh
44
-
45
- #/bin/zsh
46
-
47
- target="[説明]:ここは説明です。[色]:ここは色です。[サイズ]:ここはサイズです。"
48
-
49
- lst=(${=target//[/ [})
50
-
51
- echo "total:" ${#lst[@]}
52
-
53
- for v in "${lst[@]}"; do
54
-
55
- echo "$v"
56
-
57
- done
58
-
59
- ```

1

補足を追加

2021/03/15 04:38

投稿

Daregada
Daregada

スコア11990

test CHANGED
@@ -33,3 +33,27 @@
33
33
  [サイズ]:ここはサイズです。
34
34
 
35
35
  ```
36
+
37
+
38
+
39
+ zshの場合は、変数展開部分にちょっと修正が必要。同じ結果を得るには次のようにする。
40
+
41
+
42
+
43
+ ```zsh
44
+
45
+ #/bin/zsh
46
+
47
+ target="[説明]:ここは説明です。[色]:ここは色です。[サイズ]:ここはサイズです。"
48
+
49
+ lst=(${=target//[/ [})
50
+
51
+ echo "total:" ${#lst[@]}
52
+
53
+ for v in "${lst[@]}"; do
54
+
55
+ echo "$v"
56
+
57
+ done
58
+
59
+ ```