Printf

為尾隨空格設置 printf 動態格式

  • February 15, 2022

有什麼標準方法可以使 printf 的“%-6s”格式動態化?

function justify
{
echo "$(printf '%-6s' $1)"
}

我嘗試將變數插入格式,但出現錯誤處理格式錯誤。

$(printf '%-${2}s' ${1})

不完全確定通過將命令替換傳遞給的意圖是什麼echo,但這應該可以解決問題:

justify() {
   printf "%-${2}s\n" "$1"
}

如果您$1為了傳遞多個參數而沒有引用,請考慮"$@"改用。

關於您現有的嘗試,有幾點需要注意:

  1. 變數不在單引號中展開,請使用雙引號。
  2. 無需使用命令替換,直接呼叫命令即可。
  3. (可選)避免function,這是非 POSIX。

Shell 變數不在單引號內展開;the$被視為文字美元符號。您應該使用雙引號來${2}擴展為 shell 變數:

printf "%-${2}s" ${1}

您的問題並不完全清楚,因為使用命令替換將輸出printf '%-6s' $1作為輸入參數傳遞以echo刪除命令列印的任何空格字元printf。在我看來,你的函式最好寫成:

justify()
{
   printf "%-${2}s" $1
}

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