c语言中空格与nul,NUL字符在命令行中的重用
NUL是C语言中的“字符串”(C语言中并没有字符串这种数据类型)结束标志字符。ASCII为0, 在数字系统中,处理边界的那些值往往是特别的。
UNIX中真正不能作为文件名和目录名的字符只有两个:/和NUL, 前者是因为它必需担当路径的分隔符功能,后者则是因为众多用来处理文件名/目录/路径的C请库函数都以它为字串结束的约定. 尽管乍看起来不可思议, 其它的一个非可见字符, 控制字符都是可以作为文件名的一部分的, 比如换行符. 可以用
touch $'a\nb'
试试($''要求3.0的bash)
所以NUL可以用来在文件名中混入了怪字符时确保万无一失.
假设有下面的文件名:
a very long file name.txt
这样的文件名在很多情况下由于空格被约定为命令行参数的分隔符的缘故,会被当作是5个不同的文件进行处理,比如
for i in *.txt; do echo $i; done
而
echo "a very long file name.txt" | read i
也只会让你的i被赋值a而已.
grep pattern $(find -iname '*.txt')
find -iname '*.txt' | xargs cvs add
这样的处理也是一样.
所幸,已经有一批命令行工具提供了参数来以NUL来区隔不同的参数了:
grep -z -l pattern *.txt
会在向标准输出发送文件名时, 以NUL结尾每个文件名.
find -print0
做相同的事
而 xargs 也有--null, 是作为对输入中以NUL分隔参数的呼应.
cpio 要处理的文件名也是来自标准输入, 参数也是 --null
但, 如果文件名是已经被保存在一个文件文件中, 每行一个呢?
cat filename.txt
却没有一个选项以NUL代替换行符, tr!
cat filename.txt | tr "\n" "\0" | xargs cvs add
阅读(1255) | 评论(0) | 转发(0) |
c语言中空格与nul,NUL字符在命令行中的重用相关推荐
- CAD入门攻略:CAD软件中动态输入坐标与在CAD命令行中输入坐标的区别
浩辰CAD软件提供了动态输入功能,动态输入可以让我们将注意力集中到图面上,在绘制图纸的过程中不必经常看CAD命令行,从而提高绘图效率.但什么时候是相对坐标,什么时候是绝对坐标,对图纸绘制也是有所影响的 ...
- linux中 p的作用,使用ctop在命令行中检测Linux容器性能
ctop是一个新的基于命令行的工具,它可用于在容器层级监控进程.容器通过利用控制器组(cgroup)的资源管理功能,提供了操作系统层级的虚拟化环境.该工具从cgroup收集与内存.CPU.块输入输出的 ...
- Curl学习日记2 - 在Windows CMD命令行中使用Curl
在Windows CMD命令行中使用Curl 目录 在Windows CMD命令行中使用Curl 1.下载 2.安装 3.使用 4.GIT下使用Curl命令(windows命令行中) 下载Git 安装 ...
- C语言试题六十一之请编写函数fun:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成新串放在t所指数组中。
1. 题目 请编写函数fun,其功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成新串放在t所指数组中. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C程 ...
- 如何在Windows命令行中使用Unicode字符?
本文翻译自:How to use unicode characters in Windows command line? We have a project in Team Foundation Se ...
- 在Linux环境下用C语言编写一个乘法程序mult,从命令行接收两个数字,然后输出其乘积;再用C语言编写一个exec1程序,在程序中使用execvp调用mult程序计算5与10的乘积。
在Linux环境下用C语言编写一个乘法程序mult,从命令行接收两个数字,然后输出其乘积:再用C语言编写一个exec1程序,在程序中使用execvp调用mult程序计算5与10的乘积. 1.mult. ...
- 在window的cmd命令行中通过chcp修改代码页--正确显示utf-8字符
Mt8616的开发板通过adb工具可以在Windows系统的cmd命令行显示出debug信息,但是mt8516开发板的系统上是移植的裁剪的linux系统,也就是里面的文件是utf-8的编码形式,不能正 ...
- python脚本在命令行中传递参数(附字符查找小案例)
用命令行调用python脚本的时候,如果想往脚本中传递参数的时候,参数会被python解释器接收,并转换为一系列的字符串,放在sys模块中的argv列表中.因此,可以使用argv[0]来引用第一个参数 ...
- Linux 命令行中的文件名/文件路径中使用通配符的说明
文章目录 支持通配符 通配符表达式示例 通配符使用限制 使用通配符表示的路径示例 带有空格的通配符或文件名必须加上引号 支持通配符 * 表示任意数量的任意字符 ? 表示任意单个字符 通配符表达式示例 ...
最新文章
- 洛谷 P1816 忠诚
- 从这篇文章可以看出有些错误,由此可以看出,还是看msdn要好的多,这是我的经验
- java可存储100个整数的数组_定义一个一维整数数组,其中储存1000个1至100以内的整数,并统计出整数出现的次数(Java写出来)...
- php的一些不安全函数,php中可能会产生安全问题一些函数
- 20220216-MISC-BUUCTF-另外一个世界-winhex,ASCII转换-FLAG- ZIP文件提取并修复-假如给我三天光明-ZIP改RAR,摩丝电码波形转换-神秘龙卷风brainfuck
- matlab imresize
- phpmyadmin误删表后如何恢复
- systemtap打点方法
- java读取txt文件内容 乱码_java读取txt文件乱码解决方法
- SaaSBase:15个最佳免费HTML编辑器
- Dockerfile MAINTAINER和LABEL指令 语法解析
- Windows 下基于 MikTeX 的 Latex 环境配置小记
- 单片机学习笔记——微机基础知识
- git提交空目录的方法
- 计算机用户分为哪4类,计算机的分类-通常将计算机分为哪几类?通常将计算机分为哪几类,各自的特点和用途 爱问知识人...
- @Redis(redis简介,下载与安装配置,基本操作)
- phpcpp拓展开发-变量Php::Value(二)
- 基因测序股贝康医疗在港交所上市;舜宇集团战略投资汽车芯片企业地平线 | 美通企业日报...
- 目录-换热器原理及计算
- c#开发的漂亮高仿QQ打包安装程序界面