如何从顺序输入文件中导出输出文件名?
How to derive output file names from sequential input files?
我得到了一堆程序文件如下:
/work/xiaofenglu/science/myten.*.dump.gz
现在,我需要提取字符串 myten.*
作为顺序输出文件的基本名称。
我使用以下命令来处理这个问题:
for inputfile in *.dump.gz
do
base_name='basename ${inputfile} .dump.gz'
done
然而,它并没有起作用。
#!/bin/bash
shopt -s nullglob
for f in /work/xiaofenglu/science/myten.*.dump.gz; do
base_name=${f%.dump.gz} # removes trailing .dump.gz
base_name=${base_name##*/} # removes everything up to last / found
printf 'Base name is: %s\n' "$base_name"
done
您的命令不起作用,因为您甚至没有调用命令 basename
。您只是将字符串 base_name
定义为 逐字字符串
basename ${inputfile} .dump.gz
因为单引号。也许你在某处看到了这个命令:
base_name=`basename ${inputfile} .dump.gz`
并且您将反引号 ` 与单引号 '
混淆了。使用反引号而不是单引号,该命令有效。但是最好使用 $(...)
结构而不是反引号:
base_name=$(basename "$inputfile" .dump.gz)
这叫做 Command Substitution.
但我会说,调用外部进程 basename
来执行一些 Bash 本身可以做得很好的事情是没有用的。
我得到了一堆程序文件如下:
/work/xiaofenglu/science/myten.*.dump.gz
现在,我需要提取字符串 myten.*
作为顺序输出文件的基本名称。
我使用以下命令来处理这个问题:
for inputfile in *.dump.gz
do
base_name='basename ${inputfile} .dump.gz'
done
然而,它并没有起作用。
#!/bin/bash
shopt -s nullglob
for f in /work/xiaofenglu/science/myten.*.dump.gz; do
base_name=${f%.dump.gz} # removes trailing .dump.gz
base_name=${base_name##*/} # removes everything up to last / found
printf 'Base name is: %s\n' "$base_name"
done
您的命令不起作用,因为您甚至没有调用命令 basename
。您只是将字符串 base_name
定义为 逐字字符串
basename ${inputfile} .dump.gz
因为单引号。也许你在某处看到了这个命令:
base_name=`basename ${inputfile} .dump.gz`
并且您将反引号 ` 与单引号 '
混淆了。使用反引号而不是单引号,该命令有效。但是最好使用 $(...)
结构而不是反引号:
base_name=$(basename "$inputfile" .dump.gz)
这叫做 Command Substitution.
但我会说,调用外部进程 basename
来执行一些 Bash 本身可以做得很好的事情是没有用的。