linux bash bad substitution,shell 中bad substitution错误

今天在学习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"

最后编辑:2020-02-16作者:搬运工

268c484bbdf4e3afc68e23b51d3ac5a7?s=96&d=mm&r=g

这个作者貌似有点懒,什么都没有留下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值