用于文件名

时间:2018-04-13 21:00:15

标签: linux

我们说我有file0,file1 file2。

当我使用反引号将文件(0-2)复制到./output/目录中时,我有如下奇怪的结果。

for idx in `ls file*`
 do
 cp file0 ./output/$idx
done
ls output
  

'' $' \ 033'' [00mfile1' $' \ 033'' [0米' '' $' \ 033'' [0米' $' \ 033'' [00mfile0' $&#39 ; \ 033'' [0米'   '' $' \ 033'' [00mfile2' $' \ 033'' [0米'

当我回复$ idx时,没关系。但只有当我使用$ idx作为文件名时才会发生。

1 个答案:

答案 0 :(得分:0)

根本不需要进行命令替换:

for idx in file*
do
  cp file0 "./output/$idx"
done
ls output

但屏蔽文件名,可能包含空格等,总是一个好主意。这些当然对复制没有用,但仍然是有效的文件名字符,其中只有'/'作为dirs和dir之间的分隔符和文件名以及二进制零'\ 0'作为名称结尾标记,是无效的(但是你经常需要屏蔽来在文件名中使用不常见的字符。)

您的输出

''$'\033''[00mfile1'$'\033''[0m'
''$'\033''[0m'$'\033''[00mfile0'$'\033''[0m' 
''$'\033''[00mfile2'$'\033''[0m'

包含控制序列,通常用于更改终端中字符的颜色。

尝试

echo -e "\033[34mfile1 \033[33mfile0 \033[0m \033[43mfile2 \033[0m"

看到一些不同的颜色。