在bash中使用变量替换获取错误

Ano*_*ist 1 variables bash replace

美好的一天,

我想知道为什么我收到此错误:

$ DEPARTAMENTO="San Andrés" ; mv `grep "${DEPARTAMENTO:0:5}" ARCHIVOS2MOVER |  sed 's/ /\\ /g'` "$DEPARTAMENTO" ; echo "$DEPARTAMENTO"
mv: cannot stat `./P1/San': No such file or directory
mv: cannot stat `A_P1': No such file or directory
mv: cannot stat `./P2/San': No such file or directory
mv: cannot stat `A_P2': No such file or directory
San Andrés
Run Code Online (Sandbox Code Playgroud)

这是"ARCHIVOS2MOVER"文件的一部分

./Norte de Santander/Norte_P2
./P1/San A_P1
./P1/Total_P1
./P2/San A_P2
./P2/Total_P2
./Putumayo/Putum_P1
Run Code Online (Sandbox Code Playgroud)

非常感谢你给我一个线索

Eta*_*ner 6

你不能逃避这样的空间,并让shell以你想要的方式对转义的文件名进行操作.但你也不需要这样做.这就是工具之类的东西xargs.

尝试类似的东西:

grep "${DEPARTAMENTO:0:5}" ARCHIVOS2MOVER | xargs -d '\n' mv -t "$DEPARTAMENTO"
Run Code Online (Sandbox Code Playgroud)

并不是说我认为这是最好的方法,但考虑到给定的数据,它会起作用.

最好用和遍历文件的行,read然后逐行进行匹配,mv如果匹配则每个进行匹配.虽然我想也可以使用许多其他选项,具体取决于数据源的确切含义.