2017-02-01 15 views
-1

文字列に引用符を追加しようとしています。このように:bashスクリプトで文字列に引用符を追加する

stackoverflow => 'stackoverflow' 

この文字列を「カンマ」で区切られた別の変数に追加します。以下のような:

$ {リスト}(追加前)=> 'stackexchange'、···、 'メタ'

$ {リスト}、 'stackoverflowの' => 'stackexchange' .....、「メタ」、「stackoverflowの」

私はこれを行うにしようとしました:

  if [ -z "$partition_list" ] 
      then 

       partition_list="'"${partition}"'" 
      else 

       partition_list=${partition_list}",'"${partition}"'" 
      fi 

注:$パーティションが私は引用符を追加しようとしています変数です。 $ partition_listは$ partitionを追加しようとしているリストです。

動作しませんでした。私はこのような文字列を取得します:'' \ '' 10099 '\'」

EDIT:

私はこの声明を通じて、パーティションの値を取得しています:

partition=`echo $f | awk -F '=' '{print $2}'` 

はですこの文に「sed」を追加して、$ partitionに引用符を追加する方法がありますか?

ご協力いただければ幸いです。

ありがとうございます。

+0

これは非常に単純です。何を試しましたか? – heemayl

+0

簡単なはずですが、シェルスクリプトの初心者ですから、わかりませんでした。 私は代入文自体に引用符を追加しようとしました。しかし、それはうまくいかなかった。 –

+0

*常に*あなたが試したことを示してください。試した不明なコードが何も機能していないと言っても不十分です。 – chepner

答えて

1

これはどうでしょうか?

partition_list="${partition_list:+$partition_list,}'$partition'" 

if構築物は$partition_listは(:+を使用して)ヌルではなく、二重引用符内の単一引用符が展開されるの可変を停止しない場合は、カンマを含むパラメータ展開に置き換えられます。

プラス... は、常にを参照する変数を引用しています。 foo=$bar",'"$baz"'"のあなたのアイデアは、変数がグロビングによって拡張される可能性があるため、悲惨な可能性があります。あなたはifでこれを行うにはしたくなかった場合

だから、それはより多くのようになります。

 if [ -z "$partition_list" ]; then 
      partition_list="'${partition}'" 
     else 
      partition_list="${partition_list},'${partition}'" 
     fi 
+0

申し訳ありませんが、私はあなたがIF構成について何を言ったのか分かりませんでした。 –

+0

@HemanthAnnavarapu、答えが改善されましたが、 'bash'のマニュアルページでパラメータの拡張について詳しく読むことができます。 – ghoti

+0

私はあなたが言及した2つの方法を試しました。どちらも動作しません。最初のアプローチはまだ私にこのような結果を与えます: '' \ '' 10099 '\' ' –

-1

約: // EDIT:スペースを処理するために更新されました。

list=('aa xx' 'bb') 
res=() 
for ix in ${!list[*]};do 
    res+=(\'${list[$ix]}\') 
done 
res+=("'stackoverflow'") 
echo ${res[*]} 
+1

'' stack overflow''のように、スペースを含む要素が必要な場合はどうなりますか?この解決策はそれを分割するでしょう。 –

+0

私はそれを試みましたが、このような結果が得られます: '' \ '' 10199 '\' '' –

+0

これは本当に絶望的にバグです。あなたは配列として 'res'を定義していますが、最初の要素を変更して印刷するだけです。そして、ベンジャミンのメモのように、あなたは文字列を分割して要素をglob展開するのではなく、引用のために。この回答のコードをhttp://shellcheck.net/で実行し、見つかったものを修正することを検討してください。 –

関連する問題