2

私は bash スクリプトを使用して R スクリプトを作成および実行しています。RI に習熟していなかったので、bash スクリプトにループと条件を記述し、それを R スクリプトまたは「ヒア ドキュメント」に変換しました...ご想像のとおり、そうやって作ったR_scriptはものすごく長くて読みづらくなってしまうので… Rでループや条件の書き方を学んでいるのですが、system()というコマンドにいくつか難点があったので、どうにかシェルスクリプトが必要だなと思いました。引用とエスケープに夢中になりたくなかった... ;-) 私が最初に直面した問題の 1 つは、これでした: Rarr="file_1", "file_2", "file_3"R_script に挿入したかったので、この eccのような変数を宣言したかったのです。

cat>my_R_script.R<<EOF
my_arr<-c(${Rarr})
do something with my_arr
EOF

file_names が引用符で囲まれていない場合、R は file_names という名前のオブジェクトが見つからないというメッセージを表示するため、引用符が必要です。

配列定義のコンマ区切り要素で最初の解決策に従おうとしましIFS="" ,"" たがRarr="${arr[*]}";echo "${Rarr}"、 arr の要素が ${IFS} の最初の文字だけで区切られているようです...私の場合、それらはによって区切られます"方法はありますかこれを避けるには?

基本的に私の質問は、シェルにすべての文字を考慮するように強制する方法${IFS}ですか?

とにかく、私の問題に対する2つの回避策を見つけました..最初の

arr=($(ls -1 | tail))
new_IFS="\" ,\""
Rarr=${arr[0]}
for ((i=1;i<${#arr[@]};i++))
do 
    Rarr="${Rarr}${new_IFS}${arr[$i]}"
    #echo "${Rarr}"
done;
Rarr=\""${Rarr}"\"
#echo ${Rarr}

および別のパラメーター置換...しかし、私の問題に対する直接的な解決策が存在するかどうかを知りたい

よろしくお願いします。

4

2 に答える 2

0

RarrをRarr="\"file_1\" \"file_2\" \"file_3\""標準のIFSを使用するものとして単純に定義するのはどうですか?

于 2011-09-02T15:47:29.310 に答える
0

スペースなしで行う場合(必要ありません):

#!/bin/bash
arr=(${arr[*]/#/\"})            # prepend quotes
arr=(${arr[*]/%/\"})            # append quotes
IFS=, eval 'Rarr="${arr[*]}"'   # join by commas

(注:arr変更されています)。

于 2013-10-23T07:55:28.370 に答える