1、

https://blog.csdn.net/Homewm/article/details/102935965?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-1-102935965.pc_agg_new_rank&utm_term=linux%E8%B7%AF%E5%BE%84%E4%B8%AD%E5%8C%85%E5%90%AB%E7%A9%BA%E6%A0%BC&spm=1000.2123.3001.4430

https://blog.csdn.net/KSONJ120/article/details/105740742?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link

https://blog.csdn.net/liweiminlining/article/details/100991532?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.no_search_link

命令使用时路径存在空格、特殊符号(如-、@等等)如何处理呢?

再如可以转义的字符包括:"?"(问号), "*"(星号), " "(空格), "$"(货币符), "&"(逻辑符), "( )"(英文括号)等等。

很早之前应该是遇到过这种问题,也处理过该问题,但是不记得怎么处理的了,也没找到自己以前处理过的博客,那就简记下吧。

(1)Linux路径约定

在Linux下可以使用长文件名和目录名,可以给它们取任何名称,但是必须遵守以下规则:

  ☆除了/外,所有的字符都可以;
  ☆有些字符最好不用,如空格符、制表符、退格符和以下字符:? @ # $ & ( ) \ | ' ' " " 等(其中,/ 号已经在第一条被严格禁止了,()是英文括号);

  ☆避免使用+-或.作为普通文件名的第一个字符(在Linux下以.开头的文件是属于隐藏文件);

  ☆和Windows文件命名不一样的是,在Linux下文件名大小写敏感。

  ☆另外,尽量避免使用中文和中文符号;

(2)路径处理遇到的问题及解决办法

比如说路径:

/home/ubuntu/zgd/firmwareExtracted/Foscam/_04914e2d4148d741fbfc4ff073a24e38bf675452.zip.extrac0--for 1.14.1.14 version only.zip.extracted/_FI9805W_app_ver1.14.0.17.bin.extracted/_0.extracttracted/app/bin

那么想进入此路径目录下,执行

cd /home/ubuntu/zgd/firmwareExtracted/Foscam/_04914e2d4148d741fbfc4ff073a24e38bf675452.zip.extrac0--for 1.14.1.14 version only.zip.extracted/_FI9805W_app_ver1.14.0.17.bin.extracted/_0.extracttracted/app/bin
会报错无此文件或文件夹,如下图所示:

 

解决办法是路径加上一个双引号。然后就ok了。如下面所示:

方法一:(推荐使用,方法简单可行)

cd “/home/ubuntu/zgd/firmwareExtracted/Foscam/_04914e2d4148d741fbfc4ff073a24e38bf675452.zip.extrac0--for 1.14.1.14 version only.zip.extracted/_FI9805W_app_ver1.14.0.17.bin.extracted/_0.extracttracted/app/bin”


方法二:(貌似不能行)

看到有的博客说在路径前面加上--就能解决问题,然后我尝试了一下,发现仍然会出现这种报错问题。

 

方法三:(可行,但有些麻烦)

将每一个存在特殊符号的位置,都使用转义符“\”进行转义。这种方法也是ok的,只是存在一个问题是,你不知道你的列表里是否包含了所有不能处理的特殊字符。我的列表里就很少字符。所以不是很建议采用此种方法。

special_symbol = ["?", "*", "@", "#", "$", "&", "%", "(", ")", " ", ""]
方法四:(可行,麻烦程度较方法三更高)

用双引号包含某段带有非法字符的路径片段

  例如,打开 Program Files (x86) 文件夹:

1

$ cd Program" Files (x86)"

  这种方法非常灵活,双引号使用次数不限,只要成对出现即可,终端会对引号内容照单全收。

  例如,打开 Program Files (x86)/Adobe/Adobe Photoshop CS6 文件夹,你还可以这样:

1

$ cd Pro"gram Fi"les" (x86)/Adobe""/Adobe "Photo"shop C"S6

  这条指令间断、或不间断地使用了4次双引号,只要保证所有空格和括号都被包括在成对的双引号范围内,文件夹都能正常打开。

总结一下:最好最快速的方法:在linux下处理路径的时候,如果遇到一些特殊符号,执行命令出错的时候,那就使用双引号“”进行处理一下就ok了。
————————————————

 

2、

https://blog.csdn.net/qq_44737312/article/details/120994049?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-4.no_search_link&spm=1001.2101.3001.4242.3

当路径变量包含空格时,直接使用会出错

$ pwd
/home/test/Desktop/中文 空格1/English space2/混合——1_1 空 格 3
$ DIR="/home/test/Desktop/中文 空格1/English space2/混合——1_1 空 格 3"

例如,直接cd到这个有空格的路径变量是不行的

cheng@cheng:~/Desktop$ cd $DIR
bash: cd: 参数太多

情况1:当外层无引号时,路径变量加上引号就行啦

比如,把cd 后面的path变量用引号引起来就好了

cheng@cheng:~/Desktop$ cd "$DIR"
cheng@cheng:~/Desktop/中文 空格1/English space2/混合——1_1 空 格 3$


比如,把cd 后面的path变量用引号引起来就好了

当外层没有引号,只能"$DIR" ,不能\"$DIR\",否则会报错:

cheng@cheng:~/Desktop$ sudo dpkg -i \"$DIR\"/apps/xxxx-4.2.1-arm64.deb
dpkg: 错误: 无法访问归档 '"/home/test/Desktop/中文 ': 没有那个文件或目录

cheng@cheng:~/Desktop$ sudo dpkg -i "$DIR"/apps/xxxx4.2.1-arm64.deb
cheng@cheng:~/Desktop$ sudo dpkg -i "$DIR"/apps/xxxx-4.2.1-arm64.deb
情况2:当外层有引号时,加引号并转义或者加单引号
方法1:路径变量加双引号并转义
echo 'rootpassword'|su -c "dpkg -i \"$DIR\"/apps/xxx.deb"
方法2:路径变量加单引号
echo 'rootpassword'|su -c "dpkg -i '$DIR'/apps/xxx.deb"
————————————————

 

Copyright © 2024 风行天下-2080
Powered by .NET 8.0 on Kubernetes