【问题标题】:How to Correctly Write this Arithmatic Expression in Bash / Ubuntu 12.04?如何在 Bash / Ubuntu 12.04 中正确编写此算术表达式?
【发布时间】:2012-05-03 09:34:08
【问题描述】:

我无法以某种方式完成这项工作,

(( chunks = $size / $chunk_size + 1 ))
echo $chunks

编辑


我也试过了,

chunks = $(( $size / $chunk_size + 1 ))

虽然这行得通,

while [ $counter -le 10 ]; do
    echo $counter;
    (( counter++ ))
done

前者给了我/ 157286400 + 1 ")syntax error: invalid arithmetic operator (error token is ",而错误本身的格式不正确。

【问题讨论】:

    标签: linux bash shell ubuntu


    【解决方案1】:

    您的 $size 变量未初始化或其中包含其他非数字字符。

    $ chunk_size=157286400
    $ unset size
    $ (( chunks = $size / $chunk_size + 1 ))
    -bash: ((: chunks =  / 157286400 + 1 : syntax error: operand expected (error token is "/ 157286400 + 1 ")
    $ size=$'\r'  # carriage return
    $ (( chunks = $size / $chunk_size + 1 ))
     / 157286400 + 1 ")syntax error: operand expected (error token is "
    

    您可以通过像这样修改 AWK 命令来删除回车:

    awk '/^Content-Length:/ { gsub("\015", "", $2); print $2 }'
    

    【讨论】:

    • 是的,$size 可能有其他非数字空格。我正在做一个detected_size=$( echo "$header" | awk '/^Content-Length:/ { print $2 }' ),其中 $header 是一个 HTTP 标头。关于如何修复它的任何建议?非常感谢。
    • @Hindol:您可以通过像这样修改 AWK 命令来删除回车:awk '/^Content-Length:/ { gsub("\015", "", $2); print $2 }'
    • 是的,它有效,:)。您可以更新您的答案以反映这一点吗?其他人可能会觉得它有帮助。
    【解决方案2】:

    确保 $size 和 $chunk_size 已初始化... 已测试:

    size=1
    chunk_size=2
    (( chunks = $size / $chunk_size + 1 ))
    echo $chunks
    

    【讨论】:

    • 它们都已初始化,但仍无法正常工作。 echo $sizeecho $chunk_size 都打印非零值。
    【解决方案3】:

    试试这个:

    let size=10
    let chunk_size =2
    declare -i chunks
    let chunks =  $(($size / $($chunk_size + 1))))
    echo $chunks
    

    【讨论】:

      猜你喜欢
      • 2011-01-25
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      相关资源
      最近更新 更多