阿川CH
学海无涯,上栽上栽!
Toggle navigation
阿川CH
主页
归档
标签
关于 IFS 变量在$*中应用的结果
Linux
Shell
2018-03-09 17:25:50
0
0
0
cqc
Linux
Shell
# 关于linux shell中IFS变量的理解 ## 介绍 Shell 脚本中有个变量叫 IFS(Internal Field Seprator) ,内部域分隔符。 完整定义是:The shell uses the value stored in IFS, which is the space, tab, and newline characters by default, to delimit words for the read and set commands, when parsing output from command substitution, and when performing variable substitution. ## 实践 测试的shell名为`t.sh`,内容如下: ```bash IFS=: echo '$1 => '$1 echo '$2 => '$2 echo '$* => '$* echo '"$*" => '"$*" echo echo '===for loop in $*===' for i in $* do echo $i done echo echo '===for loop in "$*"===' for i in $* do echo $i done ``` ### 执行`./t.sh arg1 arg2`,输出 ``` $1 => arg1 $2 => arg2 $* => arg1 arg2 "$*" => arg1:arg2 ===for loop in $*=== arg1 arg2 ===for loop in "$*"=== arg1 arg2 ``` (通过这种方式的传参,已经很明确`arg1`和`arg2`分别是两个参数) * `$*`相当于是一个数组,其依次会对各个参数根据`IFS`的分割符来拆分并存在数组中 * `"$*"`这是字符串的表现形式,会对数组中的各元素使用`IFS`的首个字符来进行拼接 * `for ... in`语法需要的迭代对象的格式还是`arg1 arg2 ...`这种以空格分隔的形式。 在`===for loop in $*===`中对`$*`代表的数组进行迭代输出 在`===for loop in "$*"===`中,`"$"*`表示是一个字符串,所以直接`arg1 arg2` ### 执行`./t.sh "arg1:arg2"`,输出 ``` $1 => arg1 arg2 $2 => $* => arg1 arg2 "$*" => arg1:arg2 ===for loop in $*=== arg1 arg2 ===for loop in "$*"=== arg1 arg2 ``` 说明`$*`和`"$*"`都能通过IFS变量正确的解析为对应的形式,并在for中输出了和上例一致的结果 ### 执行`./t.sh "arg1 arg2"`,输出 ``` $1 => arg1 arg2 $2 => $* => arg1 arg2 "$*" => arg1 arg2 ===for loop in $*=== arg1 arg2 ===for loop in "$*"=== arg1 arg2 ``` `"arg1 arg2"`是一个参数,并通过IFS解析后还是一个参数,最终在两种for循环中都只输出一个参数
上一篇:
fork: retry: Resource temporarily unavailable
下一篇:
关于获取泛型参数的一些实践
文档导航