GNU/Linux >> Znalost Linux >  >> Linux

Jak opakovat pomlčku (pomlčku) v shellu

Užitečná odpověď John1024 poskytuje obecné řešení, které ukazuje, jak odlišit možnosti od operandů pro všechny nástroje podobné POSIXu.

V daném případě je nejjednodušší řešení (funguje nejen v bash , ale také v ksh a zsh ):

printf '%.0s-' {1..100}

Umístění %.0s před - předchází problému s počátečním - omylem za možnost.

Mírně optimalizováno:

printf '%.s-' {1..100}


Doporučil bych použít tradiční for smyčky, protože není potřeba vytvářet dílčí procesy nebo rozšiřovat 100 argumentů:

N=100
for((i = 0; i < $N; ++i)); do
  printf -
done

Je zvláštní, že printf -%s spouští "neplatná možnost", ale printf - ne. Chcete-li být ještě bezpečnější, můžete udělat printf %s - .


Použijte for smyčka a číselný rozsah:

for i in {1..10}; 
    do echo "-"; 
done

Nebo na jednom řádku:

for i in {1..10}; 
    do echo -n "-"; 
done

jehož výstupem je ---------- .

UPRAVIT :Bylo to před vaším printf upravit.


Toto vyvolá chybu:

$ printf '-%.0s' {1..100}; echo ""
bash: printf: -%: invalid option
printf: usage: printf [-v var] format [arguments]

Toto funguje dobře pod bash :

$ printf -- '-%.0s' {1..100}; echo ""
----------------------------------------------------------------------------------------------------

Pro ostatní shelly zkuste:

printf -- '-%.0s' $(seq 100); echo ""

Problém byl printf očekává, že - spustí volbu. Jak je v tomto typu situace běžné mezi unixovými/POSIXovými nástroji, -- signály na printf neočekávat žádné další možnosti.


Linux
  1. Jak uniknout citacím v Shellu?

  2. Jak zacházet s přepínači ve skriptu Shell?

  3. Jak zrychlit vyhledávání v Dash?

  1. Jak změnit Shell v Linuxu

  2. Jak vložit nový řádek do skriptu prostředí Linux?

  3. Jak při použití printf uniknout speciálním znakům ve skriptu shellu?

  1. Jak smazat soubor, jehož jméno začíná „-“ (pomlčka A.k.a. pomlčka nebo minus)?

  2. Jak zkontrolovat, zda je Shell přihlašovací/interaktivní/dávkový?

  3. Jak vytvořit dočasný soubor ve skriptu Shell?