GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie breche ich ein extrem langes String-Literal in Bash auf?

Ich definiere eine kurze strcat-Funktion oben in meinem Bash-Skript und verwende einen Inline-Aufruf, um die Dinge aufzuteilen. Manchmal bevorzuge ich es, eine separate Variable zu verwenden, weil ich das lange Literal inline mit dem Befehlsaufruf definieren kann.

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 \

Ich mag diesen Ansatz auch, wenn ich eine lange CSV-Datei mit Werten als Flag-Parameter eingeben muss, weil ich damit vermeiden kann, das Komma zwischen den Werten einzugeben:

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 \

Was äquivalent zu

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

Sie können eine Variable verwenden:

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

Man kann auch eine Array-Variable verwenden

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

Es ist ein etwas hacken, aber das funktioniert:

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

Bash verkettet String-Literale, die benachbart sind, also machen wir uns das zunutze. Beispiel:echo "hi" "there" gibt hi there aus wohingegen echo "hi""there" gibt hithere aus .

Es nutzt auch den Backtick-Operator und die Tatsache, dass eine Reihe von Leerzeichen nichts ergibt.


Linux
  1. Wie schreibe ich eine Schleife in Bash?

  2. Wie debuggt man ein Bash-Skript?

  3. Wie erstelle ich ein Array eindeutiger Elemente aus einer Zeichenfolge/einem Array in Bash?

  4. So teilen Sie eine Zeichenfolge in Bash-Skript auf

  5. Wie füge ich in Bash nach jeder Zeile in einer Datei eine Zeichenfolge hinzu?

Bash Break:So verlassen Sie eine Schleife

Bash Strings verketten

So prüfen Sie, ob eine Zeichenfolge in Bash eine Teilzeichenfolge enthält

So verwenden Sie bash if -z und if -n zum Testen von Zeichenfolgen in Linux

Bash-Scripting – String-Manipulation

So führen Sie ein Bash-Skript aus