在bash脚本中处理具有特殊字符的变量时出错



我需要帮助,试图找到一个让bash脚本能够读取带有特殊字符的文件名的解决方案。用户将启动脚本,但如果文件夹或文件具有特殊字符,则脚本将失败或出现错误。我已经尝试了在网上找到的几个选项,但我无法使它们与脚本配合使用。

该脚本设置为通过读取命令接受用户输入。

read -r -p "Enter directory name : " var1

如果用户输入是"accoutn&orders",则脚本将由于"&"而失败字符,因为它找不到目录或文件。

当脚本查找具有特定扩展名的文件时,输入的文件夹名称将是将文件复制到其他目录的路径。我遇到的问题是,其中一些文件或目录具有特殊字符,当存在特殊字符时,脚本无法处理变量,也无法找到文件。

脚本使用for循环来检查目录中的每个文件,如果文件名具有特殊字符,则循环将失败。

示例文件名:

file1@depot.rct
file2&logrecord.rct
cd $var1
ls: cannot access '/sharepool/comunityshare//'''account.&.orders'''': No such file or directory
line 141: cd: '/sharepool/comunityshare//'''account.&.orders'''': No such file or directory

我尝试过使用单引号包装和bask斜杠,但该变量不可读。

请注意,我不是程序员或开发人员,我知道一些基本的Linux命令,我正在努力在开发更好的过程中使其发挥作用。我很感激你在这方面的帮助。

我能够使用此行解决问题。

filename=$(echo "$filename" | sed 's/[&()@+*#!%^'''^]/\&/g')

如果变量有特殊字符,则插入一个反斜杠。

账户&。订单入账&。订单

感谢您的帮助和支持。

最新更新