0

私は簡単なスクリプトを持っています:

for photo in $full_path/*.jpg; do
    $b_photo=$(basename $photo)
    echo $b_photo
done

これは私がやろうとしていることの簡略化された形式ですが、これにより次のようなエラーが発生します。

./foo.sh: line 334: =foobar.jpg: command not found
4

2 に答える 2

5

で変数を割り当ててvar=$(command)、それらを使用します$var(または、より良い${var}):

for photo in $full_path/*.jpg; do
    b_photo=$(basename $photo)       <------ b_photo=$() instead of $b_photo=$()
    echo $b_photo                                                   ^
done

直接書くことができることに注意してください:

for photo in $full_path/*.jpg; do
    basename "$photo"
done
于 2013-10-25T13:03:27.997 に答える
3

fedorquiによって指摘された問題に加えて、スペースが含まれてbasename $photoいると問題が発生します。$photo

 $ photo="directory/file name"
 $ basename $photo
 file

$photoで始まる場合にも問題が発生し-ます。

$ photo="-directory/file"
$ basename $photo
basename: illegal option -- d
usage: basename string [suffix]
       basename [-a] [-s suffix] string [...]

あなたは書くことができます:

for photo in "$full_path"/*.jpg; do
    basename -- "$photo"
done

しかし、このタスクを実行するより簡単な方法 (パターンに一致するディレクトリ内のファイル名を 1 行に 1 つずつ標準出力に出力する) は、ディレクトリに切り替えて次を使用することprintfです。

{ cd -- "$full_path" && printf "%s\n" *.jpg }
于 2013-10-25T13:09:29.780 に答える