我正在尝试编写一个带有文件名的程序,并将日期放在上面。所以我试图获取文件名本身和扩展名的子串。
我是BASH的新手,所以也许我在这里遗漏了一些东西,但是按照在线指南,似乎这应该有用 -
#!/bin/bash
echo "Type filename in this dir"
read filename
file=`filename%.*`
end=`filename##*.`
today=`date +%d-%m-%y`
dated="${file}_${today}.${end}"
cat $filename > $dated
但计算机会返回这些错误 -
./fileDater.sh: line 5: filename%.*: command not found
./fileDater.sh: line 6: filename##*.: command not found
我在Windows 10上使用Ubuntu子系统,如果这很重要的话。
答案 0 :(得分:2)
你似乎对bash替换感到困惑;您正在尝试执行命令子shell(例如。`variable##*.`
) - 它应该使用${ ... }
。
#!/bin/bash
echo "Type filename in this dir"
read -r filename
file=${filename%.*}
end=${filename##*.}
today=$(date +%d-%m-%y)
dated="${file}_${today}.${end}"
cat "$filename" > "$dated"
我还没有尝试过您的剧本,但我相信这是您的主要问题。
编辑:关于使用反引号(`...`
)
以`COMMAND`
的形式,它或多或少已经过时了Bash,因为它在嵌套方面存在一些问题("内部"需要转义的反引号)和转义字符。
使用 $(COMMAND)
- 它也是POSIX!