代码之家  ›  专栏  ›  技术社区  ›  user3313834

从bash var读取printf格式

  •  0
  • user3313834  · 技术社区  · 6 年前

    我有一个很高兴的bash脚本:

    $ printf '  Number of xml files: %s\n' `find . -name '*.xml' | wc -l`
    42
    $
    

    然后消息变长了:

    $ printf '  Very long message here about number of xml files: %s\n' `find . -name '*.xml' | wc -l`
    42
    $
    

    所以我试着把它放在一个消息变量中,保持在80cols::

    $ MSG='  Number of xml files after zip-zip extraction: %s\n'
    $ printf $MSG `find xml_out -name '*.xml' | wc -l`
    

    没有成功:

    $ printf $MSG `find xml_out -name '*.xml' | wc -l`
    Number$
    $ 
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Derviş Kayımbaşıoğlu    6 年前

    你需要把它放在双引号里

    printf "$MSG"  `ls | wc -l`
    
        2
  •  2
  •   anubhava    6 年前

    您可以这样使用:

    msg='  Number of xml files after zip-zip extraction: %s\n'
    printf "$msg" "$(find xml_out -name '*.xml' -exec printf '.' \; | wc -c)"
    
    • msg 应在 printf 命令。
    • 避免使用管道 wc -l 解决文件名可能包含换行符、空格或通配符的问题。
    • 避免shell中的所有大写变量。