简体   繁体   English

在同一脚本中重用包含变量的代码 bash

[英]Reuse code that contains variables in same script bash

I have a small block of code in bash like below我在bash中有一小段代码,如下所示

#!/bin/bash

query="select * from table where id = ${row_id}"

row_id=1
echo "$query"


row_id=3
echo "$query"


row_id=4
echo "$query"

expected output is below预计 output 低于

select * from table where id = 1
select * from table where id = 3
select * from table where id = 5

But I am getting nothing as output但我什么也没得到,因为 output

I know I am referencing variable before assigning it.我知道我在分配变量之前引用了它。

The idea here is to use reusable code instead of writing the same code at many places这里的想法是使用可重用的代码,而不是在许多地方编写相同的代码

How can I achieve what I want我怎样才能达到我想要的

you should be getting你应该得到

select * from table where id =
select * from table where id =
select * from table where id =

and as you already mentioned the reason is正如你已经提到的原因是

I know I am referencing variable before assigning it.我知道我在分配变量之前引用了它。

One way to implement this实现这一点的一种方法

$ for row_id in 1 3 5; 
  do 
    echo "select * from table where id = $row_id"; 
  done

select * from table where id = 1
select * from table where id = 3
select * from table where id = 5

UPDATE更新

Based on the comment根据评论

Here if row_id is a random variable I get as part of another query then how do I get the correct query as my output

which is different from the posted question, better to define a function这与发布的问题不同,最好定义一个 function

$ getquery() { echo "select * from table where id = $1"; }

$ getquery $RANDOM

select * from table where id = 12907

You can create a function and call the function at various place by assign variable to it您可以创建一个 function 并通过为其分配变量在不同的地方调用 function

#!/bin/bash

# create a function with variable and write your command
# here your command is print the query 
my_function_name(){
arg1=$1
echo "select * from table where id = ${arg1}"
}

# assign varaible 
row_id=1

# print the ourput of function when above variable is assigned
query=$(my_function_name "$row_id")

echo $query


# assign varaible 
row_id=2

# print the ourput of function when above variable is assigned
query=$(my_function_name "$row_id")

echo $query

# assign varaible 
row_id=3

# print the ourput of function when above variable is assigned
query=$(my_function_name "$row_id")

echo $query

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM