linux bash bad substitution,shell 中bad substitution错误
今天在学习linux写shell脚本的时候,碰到了一个bad substitution错误。脚本的内容是输入一个文件名,创建出三个文件名+日期(今天,昨天,前天)的文件。有错误的代码如下:1 #!/bin/bash2 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~bin3 export PATH45 echo
今天在学习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作者:搬运工
这个作者貌似有点懒,什么都没有留下。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)