shell命令declare和eval的使用

一. declare命令
declare 是 Bash 的一个内置命令,用于声明变量并设置其属性。它提供了比普通变量声明更强大的功能,比如指定变量类型、创建数组、设置变量的只读属性等
1.基本语法
declare [选项] [变量名=[值]]
-a:声明一个索引数组(普通数组)。
-A:声明一个关联数组(键值对数组)。
-i:声明一个整数变量。
-r:将变量声明为只读。
-p:打印变量的声明信息。
-x:将变量导出为环境变量。

2. 声明普通变量
declare var="Hello"
echo $var

3. 声明整数变量
declare -i num=10
echo $num

4. 声明索引数组
declare -a fruits=("apple" "banana" "cherry")
echo ${fruits[1]}

打印所有键: echo ${!fruits[@]}
打印所有值: echo ${fruits[@]}

5. 声明关联数组(键值对形式)
declare -A user_hosts
user_hosts["alice"]="test1,test2"
user_hosts["bob"]="test3"
echo ${user_hosts["alice"]}

打印所有键: echo ${!user_hosts[@]}
打印所有值: echo ${user_hosts[@]}

6. 声明只读变量
declare -r readonly_var="Cannot change"

7. 打印变量声明信息
declare -p var

8. 导出变量为环境变量
declare -x export_var="Exported"
echo $export_var

9.动态变量名(使用变量的值,作为新变量的名)
varname="myvar"
declare "$varname=10"
echo $myvar

10.删除变量用unset
unset 变量名


二.
eval 是 Bash 中的一个非常强大的内置命令,它用于将字符串作为命令执行。

1.基本用法
eval [命令字符串]

2.动态构造和执行命令
command="echo Hello"
eval $command

3.动态变量赋值
varname="myvar"
eval "$varname=10"
echo $myvar

三. 应用
打印出来有那些用户在test1 test2 test3 test4上
格式:【用户名:主机n】

#/bin/bash
declare -A user_hosts
for i in test1 test2 test3 test4;do
        data=$(cat /etc/passwd 2> /dev/null)
        data=$(echo "$data" | grep -v '/sbin/nologin'| grep bash | awk -F':' '{print $1}')
        for user in $data; do
                if [[ ! "${user_hosts[$user]}" =~ "$i" ]]; then
                        if [[ -n "${user_hosts[$user]}" ]]; then
                                user_hosts[$user]="${user_hosts[$user]},$i"
                        else
                                user_hosts[$user]="$i"
                        fi
                fi
        done
done

for user in "${!user_hosts[@]}"; do
    echo "$user: ${user_hosts[$user]}"
    echo
done

  

posted @ 2025-08-01 16:13  铿锵有力自信且坚定  阅读(250)  评论(0)    收藏  举报