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

Verwenden Sie Variablen innerhalb der {}-Erweiterung ohne `eval`?

Kann ich Variablen innerhalb von {} verwenden Erweiterung ohne Aufruf von eval ? Wenn ja, wie?

Das funktioniert nicht:

$ touch 1.foo 1.bar
$ ls 1.{foo,bar}
1.bar  1.foo
$ extensions=foo,bar
$ ls 1.{$extensions}
ls: cannot access 1.{foo,bar}: No such file or directory

Es funktioniert mit eval :

$ eval ls 1.{$extensions}
1.bar  1.foo

Akzeptierte Antwort:

Die Klammerexpansion findet sehr früh während der Expansion statt (tatsächlich als erstes), vor der Variablenexpansion. Um das Ergebnis einer Variablenerweiterung mit geschweiften Klammern auszuführen, müssen Sie eval verwenden .

Sie können den gleichen Effekt auch ohne eval erzielen wenn Sie extensions machen ein Wildcard-Muster anstelle eines geschweiften Musters. Setzen Sie den extglob Option zum Aktivieren von ksh-ähnlichen Mustern.

shopt -s extglob
extensions='@(foo|bar)'
ls 1.$extensions

Linux
  1. So verwenden Sie Podman innerhalb von Kubernetes

  2. So verwenden Sie Podman in einem Container

  3. Einem Benutzer erlauben, Sudo ohne Passwort zu verwenden?

  4. Bash Brace Erweiterung &Variablen?

  5. Wie verzögere ich die Variablenerweiterung?

So verwenden Sie Variablen im Ansible Playbook

So verwenden Sie Variablen in Shell-Skripten

So verwenden Sie ISPConfig und Seafile ohne manuelle Dateiänderungen

So verwenden Sie den Echo-Befehl ohne Zeilenumbruch

So verwenden Sie „yum downloadonly“, um ein Paket herunterzuladen, ohne es zu installieren

Wie verwende ich die Linux-Bash-Shell in Windows 10?