変数内のファイルのパスと拡張子を一度に変更したいとします。一時変数Bash:2行の文字列演算を1行に適用する方法は?
せずに、次の
for F in $(find /foo/bar -name "*.ext"); do
Ftmp=${F%.ext}
cp $F ${Ftmp//bar/b0r}.tmp
done
は、2つの文字列操作はbashの唯一の手段で一度に適用することはできますか?
変数内のファイルのパスと拡張子を一度に変更したいとします。一時変数Bash:2行の文字列演算を1行に適用する方法は?
せずに、次の
for F in $(find /foo/bar -name "*.ext"); do
Ftmp=${F%.ext}
cp $F ${Ftmp//bar/b0r}.tmp
done
は、2つの文字列操作はbashの唯一の手段で一度に適用することはできますか?
答えはあなたが話している番号
これらはすべて形式が${parameter...
で、パラメータは"a name, a number or one of the special characters listed below..."なので、パラメータ自体が式であってはいけません。
さてあなたは、一時変数なしのようにそれを行うことができます。
for F in $(find /foo/bar -name "*.ext"); do
cp $F "$(sed 's/\.[^.]\+$/.tmp/;s/bar/b0r/' <<< $F)"
done
しかし、それは、2つの新しいプロセスです。単純な変数展開では、その変数が必要だと思います。
を編集します。@glenn jackmanのおかげで、それはもう1つのプロセスです。
EDIT2:これはあなたのために働くかもしれない
for F in $(find /foo/bar -name "*.ext"); do
F=${F/.ext/}
cp ${F}.ext ${F/bar/b0r}.tmp
done
:単一の変数の並べ替えを持つ唯一のbash
for F in $(find /foo/bar -name "*.ext" | sed 's/\.ext$//'); do
cp ${F}.ext ${F//bar/b0r}.tmp
done
使用バッシュ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
あなたは "エコー" を削除するには、 "ここに文字列を" bashのを使用することができ
: 'CP "$ F"「$(SEDさん/ \を[ ^。] \ + $ /。tmp /; s/bar/b0r/'<<< "$ F") "' –
@glennjackmanありがとうございました。 –
これはbashだけではありません。 sedは組み込みではありません。 – user123444555621