typeset 用法

typeset用于设置变量属性,如大小写,宽度,左右对齐等都可以用typeset来控制, 当用typeset改变一个变量的属性时,这种改变是永久的,下面以ksh为例,演示typeset的几种典型用法



1,无选项的执行typeset,则显示所有变量
/home/lee#typeset
typeset COLORS
typeset -x COLORTERM
typeset -x DISPLAY
typeset -x GDMSESSION
typeset -x GNOME_DESKTOP_SESSION_ID
typeset -x GTK_RC_FILES
typeset -x G_BROKEN_FILENAMES
typeset -x HISTSIZE
typeset -x HOME
typeset -x HOSTNAME
typeset IFS
typeset -x INPUTRC
typeset -r KSH_VERSION
typeset -x LANG
typeset -x LANGUAGE
typeset -x LESSOPEN
typeset -x LOGNAME
typeset -x LS_COLORS
typeset -x MAIL
typeset -i MAILCHECK
typeset -i OPTIND
typeset -x PATH
typeset -i PPID
typeset -x PS1
typeset PS2
typeset PS3
typeset PS4
typeset -x PWD
typeset -i RANDOM
typeset -i SECONDS
typeset -x SESSION_MANAGER
typeset -x SHELL
typeset -x SHLVL
typeset -x SSH_AGENT_PID
typeset -x SSH_ASKPASS
typeset -x SSH_AUTH_SOCK
typeset SUPPORTED
typeset -x TERM
typeset -i TMOUT
typeset -x USER
typeset -x USERNAME
typeset -x WINDOWID
typeset -x XAUTHORITY
typeset -x XMODIFIERS
typeset _

2:typeset的-u选项可以将一个变量的字符变成大写
/home/lee#typeset -u var=abc
/home/lee#echo $var
ABC

3:typeset的-l选项将一个变量的字符变成小写
/home/lee#typeset -l var=ABC
/home/lee#echo $var
abc

4:typeset的-L选项把变量变成一个左对齐的4个字符串,有些像字符串截取 
/home/lee#typeset -L4 var=abcdefg
/home/lee#echo $var
abcd

5:typeset的-R选项把变量变成一个右对齐的4个字符串
/home/lee#typeset -R4 var=abcdefg
/home/lee#echo $var
defg

6:typeset的-Z选项把串变成一个空填充,占15个字符位的串,冒号用来保护空白符
/home/lee#typeset -Z15 var="abc ddd"
/home/lee#echo "$var"
^^^^^^^^abc ddd #^为空白
/home/lee#typeset -LZ15 var="abc 123"
/home/lee#echo "$var$var"
abc 123 abc 123

7:变量n是一个被设置成一个整数的变量,typeset命令将整数n前面补齐0,共15个字符位
/home/lee#typeset -i n=24
/home/lee#typeset -Z15 n
/home/lee#echo $n
000000000000024

8:变量answer被给定一个值--Yes并变成一个小写,左对齐,一个字符的串
/home/lee#typeset -lL1 answer=Yes
/home/lee#echo $answer
y

typeset其他用法:
typeset -i num #强制num为一个整数,如:
/home/lee#typeset -i num=10
/home/lee#echo $num
10
/home/lee#typeset -i16 num=10
/home/lee#echo $num
16#a
/home/lee#typeset -i2 num=10
/home/lee#echo $num
2#1010
/home/lee#typeset -i8 num=10
/home/lee#echo $num
8#12

typeset -x #显示被导出的变量
typeset a b c #如果在一个函数里定义,则把a b c创建为局部变量
typeset -r x=var#设置一个只读变量
### 不同编程语言中的 Set 数据结构及其用法 #### ES6 中的 Set 数据结构 在 JavaScript (ES6),Set 是一种新的数据结构,允许存储任何类型的唯一值,无论是原始值或是对象引用。这使得 Set 类似于数组,但成员不可重复。通过 `new Set()` 可创建一个新的 Set 对象。 ```javascript let mySet = new Set(); mySet.add(1); mySet.add(5); mySet.add('some text'); console.log(mySet.size); // 输出: 3 ``` 此特性确保了集合内的元素具有唯一性[^1]。 #### Go 语言中的 Set 实现 对于 Go 语言而言,通常采用内置的 `map` 结构来模拟 Set 行为。具体来说,就是利用 `map[K]struct{}` 形式的映射表,其中 K 表示键类型而 struct{} 则代表零大小的占位符。这种方式不仅节省空间而且效率较高。 ```go type Set map[string]struct{} func NewSet() Set { return make(Set) } var emptyStruct struct{} s := NewSet() s["key"] = emptyStruct if _, exists := s["key"]; exists { fmt.Println("Key Exists") } ``` 这种设计充分利用了 Go 的特性和性能优势[^2]。 #### C++ STL 中的 set 和 multiset 容器 C++ Standard Template Library(STL) 提供了两种主要形式的关联容器——`set` 和 `multiset`。两者都基于红黑树实现,默认情况下保持有序排列。区别在于: - **set**: 所有关键字必须独一无二; - **multiset**: 支持相同的关键字多次出现。 下面展示了如何检测一个多集是否为空以及基本的操作方法: ```cpp #include <iostream> #include <set> int main(){ std::multiset<int> ms; if(ms.empty()){ std::cout << "The multi-set is empty." << std::endl; } ms.insert(42); auto it = ms.find(42); if(it != ms.end()){ std::cout << *it << " found!" << std::endl; } } ``` 此外,还存在无序版本如 `unordered_set` 和 `unordered_multiset` 使用哈希表作为内部机制[^4]。 #### 总结 不同编程环境中对 Set 进行了多样化的设计与优化,以适应各自的特点和需求。无论是在动态脚本环境下的简洁易用还是静态编译型语言里的高效执行,都能找到适合的应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值