我正在尝试使用以下命名约定创建指向文件的符号链接:
.$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*
$()
这是反引号被弃用并且应该始终被首选的众多原因之一。