IFS больше, чем символьное использование с R скриптом и bash - PullRequest
2 голосов
/ 26 августа 2011

Я использую сценарии bash для написания и запуска сценариев R: поскольку я не был опытным в RI, я писал циклы и условия в сценарии bash, которые затем переводились в сценарии R или «здесь документы» ... как вымогу представить, что R_scripts, созданные таким способом, становится чрезвычайно длинным и трудным для чтения ... поэтому я научился писать циклы и условия с помощью R, но я обнаружил несколько трудностей с системой команд (), поэтому я понял, что сценарии оболочки быликаким-то образом необходимым, если я не хочу сходить с ума от цитирования и экранирования ... ;-) Одна из первых проблем, с которыми я столкнулся, заключалась в следующем: я хотел объявить переменную, подобную этой Rarr="file_1", "file_2", "file_3" ecc, потому что я хотел вставить ее вR_script

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

нужны кавычки, так как если имена файлов не указаны, R предложит вам не найти объекты с именами файлов

Я попытался следовать первому решению в запятой отдельные элементы массива , определяющие IFS="" ,"", но кажется, что когда Rarr="${arr[*]}";echo "${Rarr}" элементы arr aразделены только первым символом $ {IFS} ... в моем случае они будут разделены " есть ли способ избежать этого?

Итак, в основном мой вопрос: как заставить shellчтобы рассмотреть все символы в ${IFS}?

, в любом случае я нашел два обходных пути для моей проблемы ... первый

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}

и другой с подстановкой параметров ... но я бы хотелзнаю, есть ли прямое решение моей проблемы

заранее благодарю за помощь

Ответы [ 2 ]

0 голосов
/ 23 октября 2013

Если мы обойдемся без пробелов (которые нам не нужны):

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

(примечание: arr изменено).

0 голосов
/ 02 сентября 2011

Как насчет простого определения Rarr как Rarr="\"file_1\" \"file_2\" \"file_3\"" с использованием стандартного IFS?

...