0

bash を使用してファイルのフォルダーを反復処理していますが、前のパスをカットする必要があります。たとえば、この「/temp/test/filename」がある場合、「/temp/test/」を切り取り、ファイル名を変数に保存して、ファイル名を含むログを書き込めるようにします。

誰でも私を助けることができますか?問題は、変数 temp が常に空であることです。

これが私のbashコードです:

#!/bin/bash

for file in /temp/test/*
do
    if [[ ! -f "$file" ]]
    then
        continue
    fi

    temp="$file"|cut -d'/' -f3

    $file > /var/log/$temp$(date +%Y%m%d%H%M%S).log
done

exit
4

1 に答える 1

1

それを試してください:

$ x=/temp/test/filename
$ echo ${x##*/}
filename

別の解決策は、次を使用することbasenameです。

$ basename /temp/test/filename
filename

最初の解決策はパラメーターの拡張であり、bash組み込みであるため、パフォーマンスが向上します。

あなたのラインtemp="$file"|cut -d'/' -f3は壊れています。

  • コマンドの出力を変数に格納する場合は、次のようにする必要がありますvar=$(command)
  • ( )STDINまたは_here-string<<<echo value | command

最後に、使用したい場合cut

$ temp=$(cut -d/ -f4 <<< /temp/test/filename)
$ echo $temp
filename
于 2012-10-17T22:36:08.227 に答える