我想编写一个 shell 脚本(OSX),它将 csv 文件中列出的文件复制到特定目录。我需要从 csv 文件中的每一行中删除引号。
我的尝试
for i in $(cat myfile.csv)
temp="${$i%\"}"
temp="${temp#\"}"
do
cp foldername/$temp foldername/subfoldername
done
我收到此错误:
./mfcsv.sh: line 2: syntax error near unexpected token `temp="${$i%\"}"'
./mfcsv.sh: line 2: ` temp="${$i%\"}"'
答案1
你有2个错误:
- 错误的循环语法,
do
应该在第二行 - 错误的替换语法,
i
需要之前没有美元符号
尝试这个:
#!/bin/bash
for i in $(cat myfile.csv)
do
temp="${i%\"}"
temp="${temp#\"}"
cp foldername/$temp foldername/subfoldername
done
但是,如果文件名中有空格,则会失败。下面的脚本也适用于空格:
#!/bin/bash
while read i;
do
temp="${i%\"}"
temp="${temp#\"}"
cp "foldername/$temp" "foldername/subfoldername"
done < myfile.csv
答案2
将 放在do
参数扩展之后,而不是之前。并在扩展中省略 $ 符号,并在扩展周围使用双引号,除非分配给变量时。例如
while read file
do
temp=${file%\"}
temp=${temp#\"}
cp "foldername/$temp" "foldername/subfoldername"
done < myfile.csv