BASH 用于检索文件名的字符串运算符语法
BASH string operator syntax for retrieving filename
我正在尝试编写一个程序来获取文件名并在上面加上日期。所以我正在尝试获取文件名本身和扩展名的子字符串。
我是 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
但是电脑returns这些错误-
./fileDater.sh: line 5: filename%.*: command not found
./fileDater.sh: line 6: filename##*.: command not found
我在 Windows 10 上使用 Ubuntu 子系统,如果这很重要的话。
您似乎对 bash 替换有些困惑;您正在尝试执行命令 sub-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,它或多或少已经过时了,因为它在嵌套("inner" 反引号需要转义)和转义字符方面存在一些问题。
改用$(COMMAND)
——它也是POSIX!
我正在尝试编写一个程序来获取文件名并在上面加上日期。所以我正在尝试获取文件名本身和扩展名的子字符串。
我是 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
但是电脑returns这些错误-
./fileDater.sh: line 5: filename%.*: command not found
./fileDater.sh: line 6: filename##*.: command not found
我在 Windows 10 上使用 Ubuntu 子系统,如果这很重要的话。
您似乎对 bash 替换有些困惑;您正在尝试执行命令 sub-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,它或多或少已经过时了,因为它在嵌套("inner" 反引号需要转义)和转义字符方面存在一些问题。
改用$(COMMAND)
——它也是POSIX!