Bash-Expansion

如何使用括號進行擴展,但在輸出中使用逗號而不是空格作為分隔符?

  • June 11, 2020

我需要這樣做IFS=",";echo {1..5}才能輸出1,2,3,4,5而不是1 2 3 4 5. 如何製作 bash echo {1..5} 並用逗號輸出值?

使用 Bash 的內置函式:

這有點難看,因為我們需要分隔5以避免尾隨逗號:

$ printf '%s,' {1..4}; echo 5
1,2,3,4,5

雖然因為printf可以直接輸出到變數,但可以解決這個問題,並通過參數擴展刪除最後的逗號:

$ printf -v tmpvar "%s," {1..5}; echo "${tmpvar%,}"
1,2,3,4,5

或 with "$*",它使用 的第一個字元連接IFS。這會破壞全域狀態,但您可以通過在子shell或函式中執行它來輕鬆避免這種情況local IFS

$ IFS=,; set -- {1..5}; echo "$*";
1,2,3,4,5

如果限制在變數中,那麼使用循環手動執行它可能是最簡單的,因為您不能將變數用作大括號擴展範圍中的端點。同樣,上限是在特殊情況下:

a=1; b=5
for (( i=a ; i<b ; i++ )); do
   printf "$i,";
done;
printf "$b\n" 

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