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 \

1648888之间添加了额外的space。没有space怎么显示?

IP地址后面总会有space,但是,您可以这样删除它:

CURRENTOST=${CURRENTHOST::-1}

参考:https://unix.stackexchange.com/questions/144298/delete-the-last-character-of-a-string-using-string-manipulation-in-shell-script

您的代码质量将真正受益于 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