首页 > 解决方案 > 将参数的值传递给 shell 函数只打印参数的名称

问题描述

我需要将一个参数传递给我的 shell 函数,如下所示:

function deploy {

        docker create \
        --name=$1_temp \
        -e test_postgres_database=$2 \
        -e test_publicAddress="http://${3}:9696"\
        # other irrelevant stuff

我正在传递以下参数:

deploy test_container test_name #1 test_database #2 ip_address #3

因此,当我传递这 3 个参数时,会根据它们创建一个新容器。但是,第三个参数有些特殊。所以还有另一个函数,它获取容器的 ip。

function get_container_ip_address {
    container_id=($(docker ps --format "{{.ID}} {{.Names}}" | grep $1))
    echo $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${container_id[0]})

所以,部署函数的执行实际上是这样的:

ip_address=$(get_container_ip_address test_container)
deploy test_container test_database ip_address

假设容器的 IP 地址是 1.1.1.1,那么ip_address=1.1.1.1. 但是,当我执行脚本并创建容器时,它的 IP 地址是: "http://ip_address:9696"而不是"http://1.1.1.1:9696".

我还尝试了以下方法:

...
-e test_publicAddress="http://$3:9696"\
...

但我仍然得到相同的结果。有没有办法获得传递参数的值?顺便说一句,我确信它包含所需的 IP 地址,因为我在其他地方(不是在函数中)使用它并且我打印了它以进行测试。先感谢您!

标签: bashshelldockerparameters

解决方案


所以像这样运行:

ip_address=$(get_container_ip_address test_container)

deploy test_container test_database $ip_address

当你在没有$脚本的情况下调用它时,让它像字符串一样单独放置ip_address


推荐阅读