GNU/Linux >> Znalost Linux >  >> Linux

Použít proměnné uvnitř rozšíření {} bez `eval`?

Mohu použít proměnné uvnitř {} rozšíření bez apelování na eval ? Pokud ano, jak?

Toto nefunguje:

$ 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

Funguje s eval :

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

Přijatá odpověď:

Expanze závorky nastává velmi brzy během expanze (ve skutečnosti první věc), před proměnnou expanzí. Chcete-li provést expanzi složené závorky na základě výsledku proměnné expanze, musíte použít eval .

Stejného efektu můžete dosáhnout i bez eval pokud vytvoříte extensions zástupný vzor namísto vzoru složené závorky. Nastavte extglob možnost aktivovat vzory podobné ksh.

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

Linux
  1. Jak používat Podman uvnitř Kubernetes

  2. Jak používat Podman uvnitř kontejneru

  3. Použít rozšíření parametrů k úpravě výstupu jiného rozšíření?

  1. Jak používat dd v Linuxu bez zničení disku

  2. Použít Ts bez ztráty výstupní hodnoty?

  3. Proč variabilní expanze bez $ funguje ve výrazech?

  1. Povolit uživateli používat sudo bez hesla?

  2. Jak používat atomové proměnné v C?

  3. Používejte .bashrc bez přerušení sftp