我想立刻更改变量中文件的路径和扩展名,例如执行以下操作
for F in $( find /foo/bar -name "*.ext" ); do
Ftmp=${F%.ext}
cp $F ${Ftmp//bar/b0r}.tmp
done
没有临时变量
可以一次应用两个字符串操作,只有bash意味着什么?
答案 0 :(得分:7)
使用Bash temporary variable
$_ Temporary variable; initialized to pathname of script or program
being executed. Later, stores the last argument of previous command.
Also stores name of matching MAIL file during mail checks.
for F in $( find /foo/bar -name "*.ext" )
do
: ${F%.ext}
cp $F ${_//bar/b0r}.tmp
done
答案 1 :(得分:2)
嗯,你可以像没有临时变量那样做:
for F in $( find /foo/bar -name "*.ext" ); do
cp $F "$(sed 's/\.[^.]\+$/.tmp/;s/bar/b0r/' <<< $F)"
done
但这是两个新进程。通过简单的变量扩展,我认为您需要该temo变量。
修改:感谢@glenn jackman现在这是一个额外的过程。
Edit2 :bash
只有一个变量类型:
for F in $( find /foo/bar -name "*.ext" ); do
F=${F/.ext/}
cp ${F}.ext ${F/bar/b0r}.tmp
done
答案 2 :(得分:2)
答案是否。
你在谈论parameter expansion。
它们都采用${parameter...
形式,参数为"a name, a number or one of the special characters listed below...",因此参数本身不能是表达式。
答案 3 :(得分:-1)
这可能对您有用:
for F in $( find /foo/bar -name "*.ext" | sed 's/\.ext$//'); do
cp ${F}.ext ${F//bar/b0r}.tmp
done