bash - IFS=: "set $var" 与 "set toto:fofo"
问题描述
这可能是一个愚蠢的问题,但我试图理解为什么下面代码的版本 1 有效而版本 2 无效:
版本 1:
$ VAR=toto:fofo:bar
$ IFS=:
$ set $VAR
$ echo $1
toto
版本 2:
$ IFS=:
$ set toto:fofo:bar
$ echo $1
toto fofo bar
我不明白为什么在第一个版本中 ':' 被解释为分隔符,但在第二个版本中,它们根本没有被解释,就好像它们仅在它们是变量替换的输出时才被解释一样?
解决方案
你是对的。分词仅适用于不带引号的参数扩展和命令替换的结果。它不影响 shell 解析或语法。
这里man bash
有重点:
IFS
扩展后用于分词的内部字段分隔符[...]
推荐阅读
- nginx - NGINX Plus 和 NGINX 社区版有什么区别?WSO2 EI集群创建中使用NGINX的一些疑惑
- sql - 如何知道一个存储过程是否是从其他存储过程执行的?
- android - ARCore 使用前置摄像头为 AR 应用集成深度传感器?
- r - 如何在ggtern中旋转三元图
- makefile - 制作找不到规则来制作目标
- laravel - 如何通过单击按钮确认请求
- azure - Cosmos DB:Gremlin API 请求太大异常。如何重试通话
- python - Python3 找不到 brew 安装的模块
- python - 使用 TensorFlow 确定人体姿势质量的好方法
- laravel-5 - 我可以直接将 Laravel 5.5 升级到 Laravel 6 吗?