私は簡単なスクリプトを持っています:
for photo in $full_path/*.jpg; do
$b_photo=$(basename $photo)
echo $b_photo
done
これは私がやろうとしていることの簡略化された形式ですが、これにより次のようなエラーが発生します。
./foo.sh: line 334: =foobar.jpg: command not found
私は簡単なスクリプトを持っています:
for photo in $full_path/*.jpg; do
$b_photo=$(basename $photo)
echo $b_photo
done
これは私がやろうとしていることの簡略化された形式ですが、これにより次のようなエラーが発生します。
./foo.sh: line 334: =foobar.jpg: command not found
で変数を割り当てて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
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 }