45 votes

Création d'une chaîne de caractères répétés dans le shell script.

Je dois générer une chaîne de points ( . caractères) comme variable.

Par exemple, dans mon script Bash, pour l'entrée 15 J'ai besoin de générer cette chaîne de longueur 15 : ...............

Je dois le faire de manière variable. J'ai essayé d'utiliser ceci comme base ( de Unix.com ) :

for i in {1..100};do printf "%s" "#";done;printf "\n"

Mais comment faire pour que la valeur 100 devienne une variable ?

73voto

Electron Points 285

Vous pouvez obtenir autant d'octets NULL que vous voulez de /dev/zero. Vous pouvez ensuite les transformer en d'autres caractères. L'exemple suivant imprime 16 a minuscules

head -c 16 < /dev/zero | tr '\0' '\141'

39voto

Chris Johnsen Points 50064
len=100 ch='#'
printf '%*s' "$len" | tr ' ' "$ch"

24voto

Augy Points 62

Le chemin le plus simple et le plus court sans boucle

VAR=15

Imprime autant de points que VAR le demande (remplacez le premier point par n'importe quel autre caractère si vous le souhaitez) :

printf '.%.0s' {1..$VAR}

Enregistre la ligne en pointillé dans une variable qui sera utilisée ultérieurement :

line=`printf '.%.0s' {1..$VAR}`
echo "Sign here $line"

-Volée de façon flagrante de la réponse de dogbane https://stackoverflow.com/a/5349842/3319298

Modifier : Depuis que je suis passé à poisson voici une fonction définie dans config.fish qui permet de réaliser cette opération dans ce shell :

function line -a char -a length
  printf '%*s\n' $length "" | tr ' ' $char
end

Utilisation : line = 8 produit ======== , line \" 8 produit """""""" .

7voto

Sur la plupart des systèmes, vous pouvez vous en sortir avec un simple

N=100
myvar=`perl -e "print '.' x $N;"`

6voto

J'ai démontré une façon d'accomplir cette tâche avec une seule commande dans une autre question, en supposant qu'il s'agit d'un nombre fixe de caractères à produire.

J'ai ajouté un addendum à la fin sur la production d'un nombre variable de caractères répétés, ce qui est ce que vous avez demandé, donc ma réponse précédente est pertinente ici :

https://stackoverflow.com/a/17030976/2284005

J'y ai fourni une explication complète de son fonctionnement. Ici, je vais simplement ajouter le code pour accomplir ce que vous demandez :

    n=20 # This the number of characters you want to produce

    variable=$(printf "%0.s." $(seq 1 $n)) # Fill $variable with $n periods

    echo $variable # Output content of $variable to terminal

Sorties :

....................

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X