我需要帮助,试图找到一个解决方案,使bash脚本能够读取文件名的特殊字符。用户将启动脚本,但如果文件夹或文件具有特殊字符,则脚本将失败或出现错误。我尝试了几种我在网上找到的选项,但我无法让它们与脚本一起工作。
脚本被设置为使用read命令接收用户输入。
read -r -p "Enter directory name : " var1如果用户输入是“accoutn&orders”,脚本会因为‘&’字符而失败,因为它找不到目录或文件。
当脚本查找具有特定扩展名的文件时,输入文件夹名将是将文件复制到另一个目录的路径。我遇到的问题是,其中一些文件或目录具有特殊字符,脚本无法处理变量,在有特殊字符时无法找到文件。
脚本使用for循环检查目录中的每个文件,如果文件名有一个特殊字符,它将失败。
示例文件名:
file1@depot.rct
file2&logrecord.rctcd $var1ls: 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命令,我正在努力使这一工作,而一个更好的进程被开发。我很感激你对此的帮助。
发布于 2022-04-07 00:27:37
我用这句话解决了这个问题。
filename=$(echo "$filename" | sed 's/[&()@+*#!%^'\''^]/\\&/g')如果变量具有特殊字符,则插入反斜杠。
account.&.orders到account.&.orders
谢谢你的帮助和支持。
https://stackoverflow.com/questions/71744365
复制相似问题