2016-10-02 6 views
0

あなたは私はいくつかのbashのコードを使用してバッシュ文字列変換

inputs=("some string" "BBB" "CCC" "something else") 

inputs='["some string", "BBB", "CCC", "something else"]' 

から得る助けてくださいもらえますか?

ありがとうございます。

その後編集: 結果は、bashの配列でなければなりません。 @jamesと@Francoisによって提供されるソリューションごとに、文字列が作成されます。

アイデア? もう一度ありがとうございます。

+0

だから、何か試しましたか? –

+0

のように: 'echo $ inputs | sed -e "s/\ [/(/" -e "s/\] /)/" '? –

+0

与えられた解決策は、多くの場合、ひどく壊れます。あなたは実際にJSONを解析しようとしていますか? –

答えて

1
$ sed "s/\[/(/; s/]/)/; s/[',]//g" foo 
inputs=("some string" "BBB" "CCC" "something else") 

まずnuthinで)、その後',(\[]を交換してください。 (最後の式は、コンマを削除し、最初の試みで、それを見落とし)

+0

問題は解決しましたが、別の問題があります。結果の文字列はもはや配列ではありません。 'IFS = '' read -r -a array <<<" $ inputs "'で配列を作ると、各空間が新しい要素を宣言するにつれて、より多くの要素が得られます。どんな想い出? – gbaii

1

単純置換とmapfile

$ mapfile -t inputs < <(jq -r '.[]' <<< "$inputs") 
$ printf '<%s>' "${inputs[@]}" 
<some string><BBB><CCC><something else> 
+0

私はそれを得た。君たちありがとう! Jean-Francois、あなたのソリューションを使用します。本当に感謝しております! – gbaii

+1

@ GabrielEnacheこれはカンマを削除しません...それは大丈夫ですか、必要に応じてソリューションを変更できるということですか? – Sundeep

+2

@Sundeep:最後の式を追加しました:見落とされました(OPのように:))。どうも。 –

2

は、あなたがjqを使用することができ、あなたが["some string", "BBB", "CCC", "something else"]が含まれているinputsという変数を持っていると仮定するとsed

inputs=$(echo $inputs | sed -e "s/\[/(/" -e "s/\]/)/" -e "s/,//g") 

を使用して

+1

その行はスペースが尊重されていることを示していました。最初のコマンド( 'mapfile')を実行した後、' inputs'という配列が存在します。 – andlrc

+0

私はばかだ、あなたは正しい。どうもありがとうございました。 'jq'なしでこれを行う方法は他にありますか? – gbaii