我的 bash 腳本中有一個很長的變數。我正在嘗試分塊迭代它以進行一些處理。它在很大程度上起作用:
while [ ${#REMAINING_PLAN} -gt 0 ] ; do
CURRENT_PLAN=${REMAINING_PLAN::65300} # Truncate to 65k and iterate
# problematic line:
CURRENT_PLAN=${CURRENT_PLAN%'\\n'*} # trim truncated string to the last newline
PROCESSED_PLAN_LENGTH=$((PROCESSED_PLAN_LENGTH ${#CURRENT_PLAN})) # evaluate length of outbound batch and store
# do some stuff not shown
REMAINING_PLAN=${REMAINING_PLAN:PROCESSED_PLAN_LENGTH}
done
我正在嘗試將變數截斷為最大長度,然后進一步剝離檔案中的最后一個新行,以便我的下一個“批處理”在新行上開始處理。但是這個宣告并沒有達到我的意圖:
CURRENT_PLAN=${CURRENT_PLAN%'\\n'*} # does not actually trim truncated string to the last newline
它有什么問題,如何將字串修剪到換行符的最后一個實體?
uj5u.com熱心網友回復:
將我的評論轉換為答案,以便將來的訪問者輕松找到該解決方案。
您可以使用它在bash最后一個換行符后洗掉所有字符:
CURRENT_PLAN="${CURRENT_PLAN%$'\n'*}"
$'\n'是在 bash 中用于表示換行符的 C 類結構。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432410.html
