teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

説明を修正

2021/03/15 04:38

投稿

Daregada
Daregada

スコア11990

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

1

補足を追加

2021/03/15 04:38

投稿

Daregada
Daregada

スコア11990

answer CHANGED
@@ -15,4 +15,16 @@
15
15
  [説明]:ここは説明です。
16
16
  [色]:ここは色です。
17
17
  [サイズ]:ここはサイズです。
18
+ ```
19
+
20
+ zshの場合は、変数展開部分にちょっと修正が必要。同じ結果を得るには次のようにする。
21
+
22
+ ```zsh
23
+ #/bin/zsh
24
+ target="[説明]:ここは説明です。[色]:ここは色です。[サイズ]:ここはサイズです。"
25
+ lst=(${=target//[/ [})
26
+ echo "total:" ${#lst[@]}
27
+ for v in "${lst[@]}"; do
28
+ echo "$v"
29
+ done
18
30
  ```