shell - 如何为 printf 动态创建格式化规则?
问题描述
我正在尝试在 30 个字符宽度的多列中打印几行:
#!/bin/bash
chars_width=15
full_string="a\\nb\\nc\\nd"
number_of_columns=$(( $(tput cols) / $chars_width ))
for ((i = 0; i < number_of_columns; i++)); do
formatting_string="$formatting_string%%-"$chars_width"s "
done
echo "$full_string" | xargs -L $number_of_columns | \
while read -r values
do
printf "$formatting_string\\n" $values
done
exit
在运行它时,我希望它输出:
a b c d
但它输出:
%-15s %-15s %-15s %-15s
如何使用我的动态构建的格式化规则printf
?
解决方案
在格式字符串中使用单个 '%' 字符。你已经逃脱了他们,所以没有任何东西可以替代。
推荐阅读
- android - tflite 模型适用于 python 但不适用于 android
- android - 使用 Jetpack 数据存储保存复选框状态
- linux - AWS 生产风格的 MongoDB 部署 - 重启时自动重启 mongos
- javascript - 在反应中显示滑块图像时出错
- autodesk-forge - 导入具有 Design Collaboration 服务访问权限的用户 [autodesk-bim360]
- python - 如何使用循环 Python 安装 pip 包
- java - 在字段上自定义排序和分组 java 对象(不按字母顺序)
- c# - Don't Destroy On Load(创建多个对象)
- python - Requests-HTML “您不能在与异步事件循环相同的线程中使用 AsyncToSync - 只需直接等待异步函数。”
- linux - 在 Dockerfile 中使用 wget 时如何自动回答“是”?