簡體   English   中英

如何從順序輸入文件中導出輸出文件名?

[英]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)

這稱為命令替換

但是我要說的是,調用外部進程的basename來執行Bash可以很好地完成的事情是沒有用的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM