bash 中的变量

bash 中的变量
for i in *.jpg
do
    j = '$i | cut -d . -f 1'
    convert $i $j".png"
done

temp.sh:第 3 行:j:未找到命令

我了解 mogrify,只是想知道如何在 bash 中获取变量。

答案1

你也可以使用 bash 的内置参数扩展删除第一个点以及其后的所有内容:j="${i%%.*}"

如果你想删除最后的点及其后的任何内容(即文件的扩展名),使用:j="${i%.*}"

例子:

$ i="file.with.dots.ext"
$ echo "${i%%.*}"
file
$ echo "${i%.*}"
file.with.dots

答案2

您必须删除周围的空格=

for i in *.jpg
do
    j=`echo $i | cut -d . -f 1`
    convert $i $j".png"
done

答案3

此外,如果任何文件名包含任何特殊字符(例如空格),您的脚本将无法按预期工作。您应该养成始终将变量引用括在双引号中的习惯。试试这个:

for i in *.jpg
do
    j="$(echo "$i" | cut -d . -f 1)"
    convert "$i" "${j}.png"
done

答案4

整合bash 参数扩张和双引号对于名称中带有特殊字符的文件,代码也简化了:

for f in *.jpg; do 
    convert "$f" "${f%.*}.png"
done

相关内容