You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本中sed命令无法解析用户参数$1的问题求助

解决Bash脚本中sed命令变量未解析的问题

问题根源

你的sed命令使用了单引号包裹字符串,而Bash中单引号内的变量不会被Shell解析,所以$1被当作普通文本输出,而非脚本接收的第一个参数。

解决方案1:修改sed的引号规则

把sed命令中的单引号改成双引号,让Shell能解析$1:

sed -i "/^Hostname.*/a User\t$1" config.txt

如果想让代码更清晰,可以先把参数赋值给变量再使用:

TARGET_USER="$1"
sed -i "/^Hostname.*/a User\t$TARGET_USER" config.txt

解决方案2:直接在jq中生成User行(更高效)

没必要先生成配置再用sed追加,直接在jq的输出里加上User行,减少文件操作步骤:

#!/bin/bash
echo "user         : $1"
VPC="$(aws ec2 describe-vpcs | jq -r '.Vpcs[] | .VpcId')"
# 初始化配置文件,避免重复执行残留旧内容
> config.txt
for x in $VPC
do
  echo "$x"
  aws ec2 describe-instances --filters "Name=vpc-id,Values=$x" | jq -r --arg user "$1" '.Reservations[].Instances[] | (.Tags[]//[]|select(.Key=="Name")|.Value) as $name | "Host \($name)\nHostname \(.PrivateIpAddress)\nUser \($user)"' >> config.txt
done
cat config.txt

这里用jq的--arg参数把Shell的$1传递给jq变量,直接生成完整的SSH配置行,同时用>>追加到文件,避免每次循环覆盖内容。

内容的提问来源于stack exchange,提问作者Vanaan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:30:52