Puncte:0

Cum să „cd $variable” când variabila încearcă să adauge „\” înainte de spații (calea conține spații)?

drapel cn

Scriptul meu bash își înregistrează propria cale, astfel încât să se poată întoarce în propriul folder după ce face a CD undeva (cumva dacă explorează o altă pădure și poate să-și mute casa).

Și dacă calea are spații, am folosit sed a adauga \ înainte de fiecare spațiu.

Dar la utilizare cd $SCRIPTPATH la această variabilă:

./newsed.sh: 11: cd: nu se poate cd pe /media/daniell/B/bkp/ST500LM012\

Sursă: newsed.sh:

#!/bin/bash -e

tmp="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
SCRIPTPATH="$(echo "$tmp" | sed 's/ /\ /g')"

ecou „$SCRIPTPATH”

ls
CD
ls
cd $SCRIPTPATH
ls

echo $SCRIPTPATH produce o cale normală (/media/daniell/B/bkp/ST500LM012\ HN-M500MBB\ Dat/0/ok/Pendrive/flshdrive/0.Floflis-DNA/layers/soil) pe care îl pot copia manual și cd în el și funcționează; dar cand CDse adresează direct la variabilă (cd $SCRIPTPATH) se prăbușește imediat după \.

drapel hr
*„Și dacă calea are spații, am folosit sed pentru a adăuga \ înainte de fiecare spațiu.”* puteți evita nevoia de a face acest lucru citând corect expansiunea variabilă, ex. `cd "$variabilă"`
drapel cn
@steeldriver Vă mulțumim, rezultatul s-a îmbunătățit. Dar: `./newsed.sh: 11: cd: nu se poate cd pe /media/daniell/B/bkp/ST500LM012\ HN-M500MBB\ Dat/0/ok/Pendrive/flshdrive/0.Floflis-DNA/layers /sol` ?
drapel hr
Mai scapi din spații cu bare oblice inverse cu sed? Dacă da - nu.
drapel cn
@steeldriver Gotcha! Mulțumesc mult. Dacă vă transformați comentariile într-un răspuns, îl voi marca ca răspuns corect/cel mai bun.
waltinator avatar
drapel it
Nu vă deranjați cu evadarea spațiilor, citați pur și simplu extinderea variabilei: `cd "$tmp"`.
Puncte:0
drapel cn

Utilizați ghilimele în jurul variabilelor pentru a preveni ca spațiile să fie tratate ca delimitatori în shell, de exemplu.

cd „$SCRIPTPATH”

va functiona.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.