Vous stockez actuellement un ensemble de noms, puis passez à sed
. Lorsque le glob est étendu cela devient une commande sur le formulaire:
1butene.com xxxx | sed 's/.com//g'
Ce qui est évidemment pas quelque chose autorisée, comme 1butene.com
n'est pas une commande par lui-même.
Ce que vous devez faire est de
1) stocker les données,
2) effectuer le nettoyage.
Pour cela, nous avons de bonnes nouvelles! Vous pouvez effectuer Shell parameter expansion on arrays!
De cette façon, vous pouvez stocker les données dans un tableau:
names=(*.com)
Et puis effectuer le remplacement dans tous par tout extracting its name, sans l'extension:
printf "%s\n" "${names[@]%.*}"
Si vous souhaitez ensuite à change values of bash array elements without loop, il suffit d'utiliser la syntaxe
new_array=("${names[@]%.*}")
Exemple:
$ touch a{1..3}.{sql,com}
$ com_names=(*com)
$ printf "%s\n" "${com_names[@]}"
a1.com
a2.com
a3.com
$ printf "%s\n" "${com_names[@]%.*}"
a1
a2
a3
b=("${com_names[@]%.*}") # assign to a new array
$ printf "%s\n" "${b[@]}"
a1
a2
a3
OK, qui semble fonctionner en quelque sorte. Mais comment puis-je stocker ces noms dans le tableau? Si je fais test = (\ *. Com), puis test = $ {"% \ n" "$ {noms [@]%. \ *}"} $ Test est vide – user7408924
@ user7408924 voir la dernière partie de mon explication , avant la section _Sample_: 'var = (" $ {... [@]%. *} ")'. Aussi, essayez de ne pas utiliser le nom 'test' pour les variables, puisqu'il s'agit d'une commande elle-même! – fedorqui
Din't voir votre dernière édition. Travaux! THX! – user7408924