Shell

如何在序列的 shell 大括號擴展中使用 $variable?

  • July 26, 2021

我想$var in在 bash 中使用帶有範圍的 shell 大括號擴展。簡單地說{$var1..$var2}是行不通的,所以我去了“橫向”……

以下工作,但它有點kludgey。

# remove the split files
echo rm foo.{$ext0..$extN} rm-segments > rm-segments
source rm-segments

有沒有更“正常”的方式?

您可能想嘗試:

eval rm foo.{$ext0..$extN}

不確定這是否是最好的答案,但它肯定是一個。

正如您已經意識到的那樣,{1..3}擴展為1 2 3{foo..bar}{$foo..$bar}不觸發大括號擴展,並且後者隨後被擴展以替換$foo$bar它們的值。

GNU(例如非嵌入式Linux)的一個備份是seq命令。

for x in `seq $ext0 $extN`; do rm foo.$x; done

另一種可能。如果foo.不包含 shell 特殊字元,則為

rm `seq $ext0 $extN | sed 's/^/foo./'`

最簡單的解決方案是使用zsh,rm foo.{$ext0..$extN}你想要什麼。

引用自:https://unix.stackexchange.com/questions/7738