![$ VAR値には既にバックティックおよび/または一重引用符が含まれています。それを処理する方法? $VARをプログラムに正しく渡すにはどうすればよいですか? [コピー]](https://linux33.com/image/230401/%24%20VAR%E5%80%A4%E3%81%AB%E3%81%AF%E6%97%A2%E3%81%AB%E3%83%90%E3%83%83%E3%82%AF%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%81%8A%E3%82%88%E3%81%B3%2F%E3%81%BE%E3%81%9F%E3%81%AF%E4%B8%80%E9%87%8D%E5%BC%95%E7%94%A8%E7%AC%A6%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E3%81%9D%E3%82%8C%E3%82%92%E5%87%A6%E7%90%86%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%EF%BC%9F%20%24VAR%E3%82%92%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AB%E6%AD%A3%E3%81%97%E3%81%8F%E6%B8%A1%E3%81%99%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
$ bash --version
GNU bash, versione 5.2.26(1)-release (x86_64-pc-linux-gnu)
どう対処すべきかわかりません。$VAR内部値に一重引用符('
)および/または逆引用符(`
)が含まれている場合。
実行する必要があります探す-exec
の項目に基づいていますlist.txt
。
list.txt
含む:
- 一つファイル名.EXT各ライン
- 各行は次から始まります。新しいチーム(
\n
)
すべてが正しく機能していることを確認するための予防テストとして、次のコマンドを実行しました。
$ while IFS= read -r song; do find /mnt/EXTHDD/unsorted -type f -name "$song"; done < list.txt
$ while IFS= read -r song; do find /mnt/EXTHDD/unsorted -type f -name "*$song*"; done < list.txt
$ while IFS= read -r song; do find /mnt/EXTHDD/unsorted -type f -name '$song'; done < list.txt
$ while IFS= read -r song; do find /mnt/EXTHDD/unsorted -type f -name "${song}"; done < list.txt
それらのどれも働かなかった...
残念ながら、特殊文字のためにすべての項目がリストされているわけではありません。ファイル名したがって、$song
変数を正しく引用できません(二重引用符または一重引用符を使用)。
ラインの例ファイル名.EXT以下に見つかりましたlist.txt
:
Pino Daniele ~ [2000] Napul`e' - Raccolta completa ~ 01.14) `O ssaje comme fa `o core.mp3
[CONCERTI] Malora -- Live@TANT`E'! (Agosto '05, Villa Fossa` [presa diretta, mixer:stereo]) -- #15. 20:30 ... Tutto tace?.wave
答え1
ここでの問題は、一重引用符('
)および/または逆引用符(`
)ではありません。
代わりに角かっこ([
および]
)をエスケープする必要があります。GNUを探す-name
(または)の値を-iname
次のように解釈します。全体的な状況。
ありがとうございます。ムルそしてカミール・マコロフスキー私に正しい方向を教えてくれました!
これが私がこの問題を解決した方法です。ニュース:
while IFS= read -r song; do
unsquare=$(printf '%s\n' "$song" | sed 's/\[/\\[/g;s/\]/\\]/g') &&
find /mnt/EXTHDD/unsorted -type f -name "$unsquare"
done < list.txt