1

シェルスクリプトは初めてなので、bash での引用と分割の概念についてはよくわかりません。以下のスニペットでは:

array1=("france-country":"Italy-country":"singapore-country")
echo ${#array1[@]}

IFS=":-"

for i in ${array1[@]}
do
       echo "$i"
done
unset IFS

IFS が:-の場合、結果は次のようになると思いました。

france-country
Italy-country
belgium-country

私が引用したように(「フランスの国」)。「-」で分割すべきではないと思います。しかし、結果は次のとおりでした。

france
country
Italy
country
belgium
country

誰かが私の理解の誤りを指摘してくれれば幸いです。

4

2 に答える 2

0

このスクリプトは、コロンで区切られた文字列を Bash 配列に分割する方法を示しています。

#!/usr/bin/env bash

words="france-country:Italy-country:singapore-country:Australia-country"

IFS=':' array1=($words)
numwords="${#array1[@]}"

for((i=0; i<numwords; i++));do
    echo "$i: ${array1[i]}"
done

出力

0: france-country
1: Italy-country
2: singapore-country
3: Australia-country

に注意してください

array1=($words)

$words単語の分割を防ぐため、 を引用符で囲みません。

実際には引用符は必要ありません

words="france-country:Italy-country:singapore-country:Australia-country"

ただし、その文字列にスペースがある場合は、引用符 (一重または二重)が必要になります。同様に、 では引用符は不要でnumwords="${#array1[@]}"あり、多くの Bash プログラマーは引用符を省略します${#array1[@]}

上記の場合や...構文でテストを実行する場合など、必要ないことが確実でない限り、Bash では常に引用符を使用することをお勧めします。array1=($words)[[]]

BashGuideをブックマークして、FAQ を閲覧することをお勧めします。しかし、Bash での引用と分割の難解な方法を真に学ぶ唯一の方法は、多くのスクリプトを作成することです。:)

ShellCheckも役立つ場合があります。

于 2014-11-15T12:27:27.193 に答える