1. 文件展开
find . -name *.txt
报错:unknown primary or operator
这是因为命令行执行前先要执行波浪号~展开,变量替换,文件替换。这个 *.txt就会文件替换。
ls *.txt
crontab.txt log.txt out.txt svnlog.txt
使用双引号能避免文件替换。这样写就好了:find . -name "*.txt"
2. 一行中的空格
cat test.txt
a b
cd
如下这样用for会让空格分隔的变成两个各自处理
for a in `cat test.txt`
do
echo $a
done
a
b
cd因为等价于 for a in a b
这样写就可以避免:
cat test.txt | while read space_name; do echo $space_name; done
这只是缩写成单行模式了。有些文件名含有空格就很痛苦。
3. 换行符的定义
Dos 和 windows 采用 "回车+换行",即 "CR + LF" 表示下一行,即敲一下回车键,相当于同时执行了 "回车+换行",即 ^M$($ 不是换行符的表示,换行符没有表示出来,$ 是文本结束 EOF 的表示)。
而 UNIX/Linux 采用 "换行符",即 "LF" 表示下一行,即 "\n";
苹果机(MAC OS系统)则采用 "回车符",即 "CR" 表示下一行,即 "\r";
Carriage Return(\r ascii:13)+Line Feed(\n ascii:10)
有时在Windows中编辑的文档是是按CRLF保存的,给Linux系统使用的时候在解析处理时\n当成换行符。\r是有效字符
src=$1
这样处理后src尾巴带了个\r
只需要notepad++编辑时右下角指定用对应换行符就可。
网友评论