包含非 ASCII 字符和空格的文件路径的 bash 变量如何用作命令、cat、exiftool 等的输入?

包含非 ASCII 字符和空格的文件路径的 bash 变量如何用作命令、cat、exiftool 等的输入?

我设置了一个变量:

myvar='/home/user/shares/D/iPhoto\ Library\ Main.migratedphotolibrary/Data.noindex/2002/102008\ \ name\ lname\ event/PICT0002_2_face0.jpg'

然后尝试对这个变量进行 cat :

cat ${myvar} 结果如下:

cat: '/home/user/shares/D/iPhoto': 没有此文件或目录 cat: 'Library': 没有此文件或目录 cat: 'Main.migratedphotolibrary/Data.noindex/2002/102008': 没有此文件或目录 cat: '': 没有此文件或目录 cat: 'name': 没有此文件或目录 cat: 'lname': 没有此文件或目录 cat: event/PICT0002_2_face0.jpg: 没有此文件或目录

cat "${myvar}" 结果如下:

cat: '/home/user/shares/D/iPhoto\ Library
Main.migratedphotolibrary/Data.noindex/2002/102008\ \ name\ lname
event/PICT0002_2_face0.jpg': 没有该文件或目录

使用 myvar 的内容直接输入到 cat 中,它可以工作并且文件内容可以正确输出:

cat /home/user/shares/D/iPhoto\ Library\ Main.migratedphotolibrary/Data.noindex/2002/102008\ \ name\ lname\ event/PICT0002_2_face0.jpg

<文件内容在这里输出>

如何将文件路径分配给变量并使用 cat(或 exiftool 等)输出文件内容?

答案1

设置变量时,不要在单引号中使用反斜杠。

myvar='/home/user/shares/D/iPhoto Library Main.migratedphotolibrary/Data.noindex/2002/102008  name lname event/PICT0002_2_face0.jpg'

或者,使用反斜杠但不用引号:

myvar=/home/user/shares/D/iPhoto\ Library\ Main.migratedphotolibrary/Data.noindex/2002/102008\ \ name\ lname\ event/PICT0002_2_face0.jpg

两者都将变量设置为相同的值。然后,使用变量时使用双引号:

cat "$myvar"

相关内容