Printf 在 shell 脚本中添加额外的 space
Printf adding extra space in shell script
我正在编写 shell 脚本来创建文件并向其中写入多行。
#!/bin/bash
CURRENTHOST="$(hostname -I)"
touch genesis_start.sh
printf '%s\n\t''--http-server-address '"$CURRENTHOST"':8888 \' >> genesis_start.sh
还有很多行,但我只显示了一行。
上面的代码在 genesis_start.sh
文件中看起来像:
--http-server-address 192.168.110.164 :8888 \
在164
和8888
之间添加了额外的space。没有space怎么显示?
IP地址后面总会有space,但是,您可以这样删除它:
CURRENTOST=${CURRENTHOST::-1}
您的代码质量将真正受益于 shellcheck.net linter 的帮助。
你的脚本有很多问题:
- 误用
printf
(常量部分和变量格式器应该转到格式字符串,变量参数必须至少与变量格式器一样多)
- 单引号转义无效。
hostname -I
解析错误,可能 return 多个 space 分隔条目。
修复了您的代码:
#!/usr/bin/env bash
# Get the first IP address only
read -r CURRENTHOST _ < <(hostname -I)
printf '\t--http-server-address %s:8888\n' "$CURRENTHOST" > genesis_start.sh
我正在编写 shell 脚本来创建文件并向其中写入多行。
#!/bin/bash
CURRENTHOST="$(hostname -I)"
touch genesis_start.sh
printf '%s\n\t''--http-server-address '"$CURRENTHOST"':8888 \' >> genesis_start.sh
还有很多行,但我只显示了一行。
上面的代码在 genesis_start.sh
文件中看起来像:
--http-server-address 192.168.110.164 :8888 \
在164
和8888
之间添加了额外的space。没有space怎么显示?
IP地址后面总会有space,但是,您可以这样删除它:
CURRENTOST=${CURRENTHOST::-1}
您的代码质量将真正受益于 shellcheck.net linter 的帮助。
你的脚本有很多问题:
- 误用
printf
(常量部分和变量格式器应该转到格式字符串,变量参数必须至少与变量格式器一样多) - 单引号转义无效。
hostname -I
解析错误,可能 return 多个 space 分隔条目。
修复了您的代码:
#!/usr/bin/env bash
# Get the first IP address only
read -r CURRENTHOST _ < <(hostname -I)
printf '\t--http-server-address %s:8888\n' "$CURRENTHOST" > genesis_start.sh