2017-01-31 20 views
1

Heyhey、 これは私の最初の投稿ですので、気をつけてください。私はベストを尽くしてください。BASH grepの結果が配列名

私は自分のシステム(osx)から言語を "grep"し、これを文字列名として言語を設定しようとします。

私が使用して...

$en['a' 'b' 'c']$de['d' 'e' 'f']とどこか$fr['g' 'h' 'i']と呼ばれるいくつかの文字列を持っている:

language=$(locale | grep LANG= | cut -d'"' -f2 | cut -d_ -f1) 

くれエン、フランス、ドイツなどのISO値を与えます、...

ここに私の主な問題があります。私はちょうど${language[*]}を使用することはできません。 私はすべてを試したように感じます。既に{}()''$でエラーを試してください。デバッグが

language=ISOlanguage結果(ので、これは正しい動作します)

とされながら

だけの事私が見つけた私は私の目的の文字列としてこの値を取得しようとした場合

echo ${language[*]} , ${language[0]} , ${language[1]} 

結果in

ISO , ISO , 

正しい。私は新しい文字列を作成しているようだが、既存の文字列を使いたい。 がGoogleに任意のキーワードを知ってはいけない:(

+0

入力は正確には何ですか?どのような出力を期待していますか? – choroba

+0

私はちょうど今入力しました。私は$ {en [@]}と$ {language [@]}の出力が同じであることを期待しています。 – cr4nk89

答えて

0

これらすべての使用の配列構文:

echo ${language[*]} , ${language[0]} , ${language[1]} 

しかし、あなたは、変数を作成する方法を、これは配列ではありません、これは単純な変数であります

language=$(locale | grep LANG= | cut -d'"' -f2 | cut -d_ -f1) 

その値にアクセスするには、例えば、単に$language使用:

echo $language 

locale,grepおよびcutのパイプラインは、非常に非効率的な方法でLANG変数の最初の2文字を取得します。 あなたはそれがより効率的に部分文字列を使用して取得することができます。

language=${LANG:0:2} 

あなたは(私はここでのポイントが表示されていないが)の配列を使用したい場合は、あなたが割り当てるために値の前後に括弧をつけなければならない、例えば:バッシュの構文をrと非常に厳格であることを

echo ${language[0]} 

注:この例では

language=(${LANG:0:2}) 

この配列は、一つの要素を持っている、あなたはこのように、その値にアクセスすることができますシンボルやスペースを見れば、少しずつ細部が大きく変わるかもしれないので、正確に書くことが重要です。

スクリプトをshellcheck.netに貼り付けて、些細なエラーをチェックすることができます。

アレイの詳細については、man bashに記載されています。

+0

配列で文字列を取得した場合、配列構文を使用してもいいですか?あなたは本当に効率的です、ありがとうございます。私の配列にはまだ$ array [] – cr4nk89

+0

で配列にアクセスすることはできません。それは配列か文字列のいずれかになります。本当に配列が必要な場合は 'language =($(local ..... | ....))'を実行します。がんばろう。 – shellter

関連する問題