2

我正在使用 bash 脚本编写和运行 R 脚本:因为我不精通 RI,所以我曾经在 bash 脚本中编写循环和条件,然后在 R 脚本或“这里的文档”中进行翻译......你可以想象以这种方式生成的 R_scripts 变得非常长并且难以阅读......所以我学习了如何用 R 编写循环和条件,但我发现命令 system() 有一些困难,所以我意识到 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 的对象

我尝试在数组定义的逗号分隔元素中遵循第一个解决方案,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}

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

预先感谢您的帮助

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 回答