Votre problème immédiat est que vous devez demander grep
d'interpréter le terme de recherche comme littérale plutôt qu'une expression régulière, en utilisant l'-F
l'option:
var=$(grep -Fe "$arq" ARQ02)
De cette façon, tout regex les méta-caractères qui se trouvent dans la sortie de ls /home/lint
- tels que [
et ]
- seront toujours traités comme littéraux et ne casseront pas le grep
invocation.
Cela dit, il semble que votre commande pourrait être rationalisé, comme par en utilisant la sortie de ls /home/lint
directement comme l'ensemble des chaînes de recherche pour passer à grep
à la fois, en utilisant la -f
Option:
grep -Ff <(ls /home/lint) ARQ02 > result
<(...)
est un soi-disant process substitution, qui, tout simplement, présente e e sortie d'une commande comme s'il s'agissait d'un fichier (temporaire) , qui est ce que -f
attend: un fichier contenant les termes de recherche pour grep
.
En variante, si:
les lignes de ARQ02
contiennent seulement noms de fichiers qui entièrement partie (une partie des) les noms de fichiers dans la sortie de ls /home/lint
et
cela ne vous dérange pas tri ou voulez trier les matchs stockés dans result
,
considérez HuStmpHrrr's helpful answer.
qu'est-ce que 'ARQ02'? il me semble un fichier. alors dites-vous juste pour voir si vos fichiers dans certains dossiers se trouvent être un sous-ensemble des fichiers répertoriés dans un autre fichier? il y a déjà un certain nombre d'erreurs courantes que vous commettez dans un script aussi court. – HuStmpHrrr