我是R用户,我正在尝试使用以bash(FFmpeg)运行的程序进行循环。我似乎很自然地创建一个向量,然后在for循环中使用该向量。例如,这就是我在R中所做的:
f <- c("File name that is identifier 01.avi", "File name that is identifier 02.avi", "File name that is identifier 03.avi")
for i in 1:length(f) {for loop}
如何在bash中为矢量指定名称?
以下是我尝试并遇到以下问题:
f=["File name that is identifier 01.avi" "File name that is identifier 02.avi" "File name that is identifier 03.avi"]
bash: File name that is identifier 02.avi: command not found
Bash似乎将我的文件名识别为命令并在这种情况下运行它们
let f=["File name that is identifier 01.avi" "File name that is identifier 02.avi" "File name that is identifier 03.avi"]
bash: let: f=[File name that is identifier 01.avi: syntax error: operand expected (error token is "[File name that is identifier 01.avi")
在这里,我显然做错了什么。
如果我只为一个文件执行此操作,则可以正常工作。括号或不带括号:
f=["File name that is identifier 01.avi"]
# echo $f
[File name that is identifier 01.avi]
答案 0 :(得分:1)
在bash
中,您可以通过以下方式获得数组:
f=("File name that is identifier 01.avi" "File name that is identifier 02.avi" "File name that is identifier 03.avi")
和${f[0]}
,${f[1]}
,{f[2]}
会返回文件名。
为了遍历数组,您可以说:
for ((i = 0; i < ${#f[@]}; i++))
do
echo "${f[$i]}"
done
会返回:
File name that is identifier 01.avi
File name that is identifier 02.avi
File name that is identifier 03.avi
或者,您也可以循环说:
for i in "${f[@]}"; do echo "$i"; done
答案 1 :(得分:1)
唯一真正理智的方法是使用位置args调用bash脚本(我不知道如何从R调用程序,所以这是伪代码):
exec(["bash", "-c", "echo one: $1, two: $2", "--", "eins", "zwei")
这里,--
标记了bash选项的结束,并为脚本本身创建了所有后续参数(在本例中为eins
和zwei
)位置参数。
在脚本中嵌入单词有一种简单,可移植且安全的方法:通过\
转义单个单词的所有关键(或简单,全部)字符,并用空格分隔单词:
system("myfunction my\ first\ arg\$\%\" my\ second\ arg\&\/\%")