我写了一个bash脚本:
date=$( date +%F )
cp $1 $1_$date
当以这种方式编写并提供单个参数时,它可以正常工作。但如果我写:
cp $1 $date_$1
我收到错误消息:
cp:'1.sh'和'1.sh'是同一个文件
有人可以向我解释,为什么会发生这种情况以及如何解决这个问题。谢谢!
答案 0 :(得分:3)
问题是_
是变量名中完全有效的字符。
像这样改写:
cp $1 ${date}_$1
发生的是$date_
(注意尾随_
)的值,可能是空的。所以你的命令真的变成了cp $1 $1
。通过使用大括号,我们澄清变量的名称是" date"而不是"日期_"。
如果文件名包含空格,您还应引用使用的变量:
cp "$1" "${date}_$1"