如何为向量分配带空格的文件名?

时间:2013-08-07 08:37:46

标签: bash vector filenames assign

我是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]

2 个答案:

答案 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选项的结束,并为脚本本身创建了所有后续参数(在本例中为einszwei)位置参数。

在脚本中嵌入单词有一种简单,可移植且安全的方法:通过\转义单个单词的所有关键(或简单,全部)字符,并用空格分隔单词:

system("myfunction my\ first\ arg\$\%\" my\ second\ arg\&\/\%")