shell 中bad substitution错误

来源:互联网 发布:淘宝客费用 编辑:程序博客网 时间:2024/05/22 12:06

今天在学习linux写shell脚本的时候,碰到了一个bad substitution错误。

脚本的内容是输入一个文件名,创建出三个文件名+日期(今天,昨天,前天)的文件。

有错误的代码如下:

  1 #!/bin/bash                                                                   2 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~bin  3 export PATH  4    5 echo "i will use touch command to create 3 files."  6 read -p "Please enter your filename:" fileuser  7    8 filename=${fileuser:-"filename"}  9   10 #use date to get filename 11 date1=${date --date='2 days ago' +%Y%m%d} 12 date2=${date --date='1 days ago' +%Y%m%d} 13 date3=${date +%Y%m%d} 14 file1=${filename}${date1} 15 file2=${filename}${date2} 16 file3=${filename}${date3} 17   18 touch "$file1" 19 touch "$file2" 20 touch "$file3"


后来跟书上一一对比,发现11-13行的{}应该是()

${}里放的是变量,$(commamd)里是执行command然后用它的输出代替$()。

比如data + %Y%m%d执行后是20170930,date3=$(data + %Y%m%d),执行后就是date3=20170930


修改后:

  1 #!/bin/bash                                                                   2 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~bin  3 export PATH  4    5 echo "i will use touch command to create 3 files."  6 read -p "Please enter your filename:" fileuser  7    8 filename=${fileuser:-"filename"}  9   10 #use date to get filename 11 date1=$(date --date='2 days ago' +%Y%m%d) 12 date2=$(date --date='1 days ago' +%Y%m%d) 13 date3=$(date +%Y%m%d) 14 file1=${filename}${date1} 15 file2=${filename}${date2} 16 file3=${filename}${date3} 17   18 touch "$file1" 19 touch "$file2" 20 touch "$file3"


阅读全文
0 0
原创粉丝点击