我们说我有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作为文件名时才会发生。
答案 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"
看到一些不同的颜色。