无法回显或创建指向 bash 脚本内名称中包含特殊字符的文件的符号链接

无法回显或创建指向 bash 脚本内名称中包含特殊字符的文件的符号链接

我正在尝试使用以下命名约定创建指向文件的符号链接:

.$abc$namehere.zip;1

可以看到,其中有以下特殊字符: 。 $ ;

在我的 bash 脚本中,我有以下代码行:

FILE1=`find /mydir/ -name "\.\$abc\$*namehere*.zip*" | sort -rn | head -1`
ln -s $FILE1 .
echo "$FILE1"

当我在命令行上单独发出find命令时,我会在我感兴趣的文件的屏幕上显示结果。但是,当将其放置在上面的脚本中时,符号链接命令将返回:

ln: `./.': cannot overwrite directory

echo 命令返回一个空行而不是文件名。

我可以获得一些有关如何在脚本中修复此问题的帮助,以便我可以使用特殊字符创建指向这些文件的符号链接吗?

答案1

使用$()而不是反引号:

FILE1=$(find /mydir/ -name "\.\$abc\$*namehere*.zip*" | sort -rn | head -1)
ln -s "$FILE1" .
echo "$FILE1"

问题是,由于您将文件名括在双引号中,bash 正在扩展它,所以这

\.\$abc\$*namehere*.zip*

被扩展为

\.namehere*.zip*

$()这是反引号被弃用并且应该始终被首选的众多原因之一。

相关内容