GNU/Linux >> Znalost Linux >  >> Linux

Jak přeruším extrémně dlouhý řetězcový literál v bash?

Definuji krátkou funkci strcat v horní části mého bash skriptu a používám inline vyvolání k rozdělení věcí. Někdy tomu dávám přednost před použitím samostatné proměnné, protože mohu definovat dlouhý literál in-line s vyvoláním příkazu.

function strcat() {
  local IFS=""
  echo -n "$*"
}

mycommand \
  --server myserver \
  --filename "$(strcat \
      extremely/long/file/name/ \
      that/i/would/like/to/be/able/to/break/ \
      up/if/possible)" \
  --otherflag \
  --anotherflag \

Tento přístup se mi také líbí, když musím zadat dlouhý CSV hodnot jako parametr příznaku, protože jej mohu použít, abych se vyhnul psaní čárky mezi hodnotami:

function strjoin() {
  local IFS="$1"
  shift
  echo -n "$*"
}

csv_args=(
  foo=hello
  bar=world
  "this=arg  has  spaces  in  it"
)
mycommand \
  --server myserver \
  --csv_args "$(strjoin , "${csv_args[@]}")" \
  --otherflag \
  --anotherflag \

Což je ekvivalentní

mycommand \
  --server myserver \
  --csv_args "foo=hello,bar=world,this=arg  has  spaces  in  it" \
  --otherflag \
  --anotherflag \

Můžete použít proměnnou :

file=extremely/long/file/name
file+=/that/i/would/like/to/be/able/to/break
file+=/up/if/possible

mycommand\
    --server myserver\
    --filename $file\
    --flag flag

Lze také použít proměnnou pole

file=(extremely/long/file/name
    /that/i/would/like/to/be/able/to/break
    /up/if/possible)
IFS=''

echo mycommand\
    --server myserver\
    --filename "${file[*]}"\
    --flag flag

Je to trochu hack, ale funguje to:

mycommand \
    --server myserver \
    --filename "extremely/long/file/name/"`
               `"that/i/would/like/to/be/able/to/break/"`
               `"up/if/possible" \
    --otherflag \
    --anotherflag

Bash zřetězí řetězcové literály, které spolu sousedí, takže toho využíváme. Například echo "hi" "there" vytiskne hi there zatímco echo "hi""there" vytiskne hithere .

Využívá také operátoru backtick a skutečnosti, že spousta mezer se nevyhodnotí jako nic.


Linux
  1. Jak zjistit Bash>=4.0?

  2. Jak číst řetězec jako hexadecimální číslo v Bash?

  3. Jak najít délku struny v Bash [Rychlý tip]

  1. Jak zkontrolovat, zda řetězec obsahuje podřetězec v Bash

  2. Jak funguje cat << EOF v bash?

  3. Jak napsat víceřádkový řetězec pomocí Bash s proměnnými?

  1. Jak napsat smyčku v Bash

  2. Jak ladit Bash skript?

  3. Jak najít index slova v řetězci v bash?