shell脚本中处理 路径中的中文和空格方法 (***)已验证 OK
字段分隔符 IFS - Linux Shell 脚本 (*)
Linux下shell支持中文显示的方法
在Shell里输入中文 - linux教程
解决Xshell不显示中文目录
让linux(centos)支持中文文件和文件夹
=====================================
shell脚本中,解决:路径含中文和空格问题 (***)已验证 OK
原标题:shell脚本中处理 路径中的中文和空格方法
https://www.cnblogs.com/zhangdewang/p/8866668.html
OLDIFS=$IFS
IFS=$'\n'
#存放路径的变量在引用时都使用双引号括起来 "$VAR_PATH" @注 1
#路径拼接时后续的就不需要加双引号了"$VAR_PATH"/bin @注 2#
#如果用另一个变量存放路径变量值,再次使用时还是要用双引号 @注 3
PATH_2="$VAR_PATH"/bin @注 3_1
#use the PATH_2
echo "$PATH_2" @注 3_2
IFS=$OLDIFS @注 4
路径示例:
/home/新建 文件夹/test.sh # 在“新建”和“文件夹”之间,有一个空格。
注 1:VAR_PATH ="/home/新建 文件夹"。<< 变量的定义与赋值。
"/home/新建 文件夹/" <<最末带有“/”路径符号,在 debian 12 上验证,也是 OK的 ?。
注 2:"$VAR_PATH"/bin:“/bin” 为后续的拼接部分,不需要双引号了。如果后续路径含有空格,还是需要双引号的吧?
注 3:例子参考 注 3_1,注 3_2。
用另一个变量、存放路径变量值:注 3_1
再次使用时,还是要用双引号:注 3_2
注 4:使用没有空格的中文路径,在 debian 12 上验证,是 OK的(如使用 en版本安装,则 OS 还需要添加中文环境显示支持,这是需要的)。因此,主要是需要处理路径中的“空格”问题。
当路径中带有空格时,路径会被空格截断,从而形成 2段、或多段的字符串;而不是解释为一串完整的路径字符串。
因此,需要首先 IFS=$'\n',然后,在 sh 运行结束之后,还需要复原 IFS=$OLDIFS。否则,在系统默认状态下的路径使用方法,某些路径的构造,可能就会变异常了。
在 linux下,许多的(大部分,甚至是绝大部分)软件工具,都是在采用“拉丁字符集”操作系统环境下开发的,使用中文路径,会造成这类软件的系统路径异常。
拉丁“空格”与中文“空格”的字符编码,是不一样的。
在跨平台编程时,麻烦就是“空格”用肉眼是看不出区别的,由此导致了路径的“空格”问题,有时需要凭经验来判断。
参考:
1.16 字段分隔符和迭代器
https://zhuanlan.zhihu.com/p/612420220
内部字段分隔符(Internal Field Separator,IFS)是shell脚本编程中的一个重要概念。在处理文本数据时,它的用途可不小。我们将会讨论把单个数据流划分成不同数据元素的定界符(delimiter)。
内部字段分隔符是用于特定用途的定界符。IFS是存储定界符的环境变量。它是当前shell环境使用的默认定界字符串。
# 考虑CSV数据的情况:
data="name,sex,rollno,location"
# 我们可以使用IFS读取变量中的每一个条目。
oldIFS=$IFS
IFS=,
for item in $data;
do
echo Item: $item
done
IFS=$oldIFS.
输出如下:
Item: name
Item: sex
Item: rollno
Item: location
IFS的默认值为空白字符(换行符、制表符或者空格)。
当IFS被设置为逗号时,shell将逗号视为一个定界符,因此变量 $item 在每次迭代中读取由逗号分隔的子串作为变量值。
字段分隔符 IFS - Linux Shell 脚本 (*)
https://www.codeleading.com/article/43491108625/
内部字段分隔符(Internal Field Separator, IFS)定义一个定界符,默认是空格。
下面是一个示例:
#!/bin/bash
oldIFS=$IFS;
IFS=":";
count=0;
for item in $PATH;
do
count=$(( count + 1 ))
printf "%s\t%s\n" $count $item;
done
IFS=$oldIFS;
- oldIFS=$IFS; #保存之前的设置
- IFS=$oldIFS; #恢复之前的设置。在人为修改之后,当然需要恢复原本的设置,否则,混乱了。
程序运行结果如下:
wm@WangubuntuConsole:~/shellScriptBlog$ chmod a+x ifs.sh; ./ifs.sh
1 /home/wm/.vscode-server-insiders/bin/84236851a9116f468345f6e8a737015d/bin
2 /home/wm/bin
3 /home/wm/.local/bin
4 /home/wm/.vscode-server-insiders/bin/84236851a9116f468345f6e8a737015d/bin
5 /usr/local/sbin
6 /usr/local/bin
7 /usr/sbin
8 /usr/bin
9 /sbin
10 /bin
11 /usr/games
12 /usr/local/games
13 /snap/bin
wm@WangubuntuConsole:~/shellScriptBlog$
当IFS被设置为:时,shell将:看作分隔符,因此$item在每次迭代中读取由冒号分隔的子串作为变量值。
Linux下shell支持中文显示的方法
https://hn.landui.com/help/show-6298.html
对当前环境临时生效:export.GB18030
永久写入配?文件:vi /etc/sysconfig/i18n
#LANG="en_US.UTF-8"
LANG="zh_CN.GB18030"
SYSFONT="latarcyrheb-sun16"
在Shell里输入中文 - linux教程
https://www.zixuephp.com/linux/2014117182.html
用户要想确定在所使用的Linux系统上有没有加上中文环境,具体可分为以下两步来进行,首先对于bash,需要在/etc/profile或$HOME/.profile文件里加上下面的语句:
stty cs8 -istrip stty pass8
执行下面的命令:
#export LANG =C #export LC_CTYPE=iso-8859-1
然后,在$HOME/.inputrc里加上以下语句:
set convert -meta off set output -meta on
修改之后,用户不必重新启动系统,只需新开一个虚拟终端,或者注销后再登录即可生效.
解决Xshell不显示中文目录
https://blog.csdn.net/weixin_39578599/article/details/130693050