我必须在bash的脚本中运行以下命令并将其输出存储在变量中。 db_name是我想要替换的另一个变量。请注意name-db
和true
,我不希望我的shell开始运行它们。
aws rds describe-db-snapshots --db-instance-identifier ${db_name} --query 'DBSnapshots[?contains(DBSnapshotIdentifier, `name-db`) == `true`]'.DBSnapshotIdentifier --output text | sort -k8 | tail -n1 | gawk '{print $4}'
我首先将整个命令存储在一个字符串中,然后直接使用eval或字符串运行字符串,但每次都失败。我想它会不断扩展true
和name-db
位。有什么帮助吗?
答案 0 :(得分:2)
不是将命令存储在字符串中,而是最好将其存储在shell函数中:
function get_latest_foo () {
local db_name="$1"
aws rds describe-db-snapshots \
--db-instance-identifier "$db_name" \
--query 'DBSnapshots[?contains(DBSnapshotIdentifier, `name-db`) == `true`].DBSnapshotIdentifier' \
--output text \
| sort -k8 \
| tail -n1 \
| gawk '{print $4}'
}
latest_foo="$(get_latest_foo "$db_name")"
(注意:我在函数名中使用了foo
因为我无法分辨哪个字段$4
。您想要将名称更改为更有意义的名称。 )