我正在使用bash脚本来编写和运行R脚本:因为我不熟悉用于在bash脚本中编写循环和条件的RI,然后在R脚本或“here documents”中翻译...就像你一样可以想象以这种方式生成的R_scripts变得非常冗长且难以阅读......所以我学习了如何用R编写循环和条件但我发现命令系统()有几个困难,所以我意识到shell脚本是不知怎的,如果我不想因引用和逃避而疯狂...... ;-)
我遇到的第一个问题是:
我想声明一个像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
引用是必需的,因为如果没有引用file_names,R会提示你找不到名为file_names的对象
我试图遵循comma separated elements of array中的第一个解决方案
定义IFS="" ,""
但似乎当Rarr="${arr[*]}";echo "${Rarr}"
时,arr的元素仅由$ {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}
和另一个参数替换......但我想知道我的问题是否存在直接解决方案
提前感谢您的帮助
答案 0 :(得分:0)
如何使用标准IFS简单地将Rarr定义为Rarr="\"file_1\" \"file_2\" \"file_3\""
?
答案 1 :(得分:0)
如果我们没有空格(我们不需要):
#!/bin/bash
arr=(${arr[*]/#/\"}) # prepend quotes
arr=(${arr[*]/%/\"}) # append quotes
IFS=, eval 'Rarr="${arr[*]}"' # join by commas
(注意:arr
已修改)。