IFS不仅仅是R脚本和bash的字符用法

时间:2011-08-26 10:52:35

标签: bash r scripting ifs

我正在使用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}

和另一个参数替换......但我想知道我的问题是否存在直接解决方案

提前感谢您的帮助

2 个答案:

答案 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已修改)。