为什么我看到的每个例子都有while IFS= read line
而不是while IFS=; read line
?
我认为这name=value command
可能会设置一个局部变量sentence="hello" echo $sentence
,但sentence="hello"; echo $sentence
不起作用.
Jan*_*dec 16
的:
name=value command
Run Code Online (Sandbox Code Playgroud)
语法设置name
到value
了command
.在你的例子中:
$ sentence="hello" echo $sentence
Run Code Online (Sandbox Code Playgroud)
$句子由调用shell扩展,它没有看到设置.如果你这样做
$ sentence="hello" sh -c 'echo $sentence'
Run Code Online (Sandbox Code Playgroud)
(注意单引号$
由被调用的shell扩展)它会回显hello
.如果你试试
$ sentence="hello"; sh -c 'echo $sentence'
Run Code Online (Sandbox Code Playgroud)
它不会回显任何东西,因为它sentence
是在当前shell中设置的,而不是在被调用的shell 中,因为它没有被导出.所以
IFS=; read line
Run Code Online (Sandbox Code Playgroud)
将无法工作,因为read
将不会看到IFS
设置.
使用参数分配对命令进行前缀会影响正在执行的命令的环境.
在man bash
:
任何简单命令或函数的环境可以通过在其前面加上参数赋值来临时扩充,如上面参数中所述.这些赋值语句仅影响该命令所见的环境.
在你的例子中:sentence="hello" echo $sentence
,sentence
将在echo
命令的环境中(尝试这样来表明你自己:) sentence=HI env | fgrep sentence
,但不是在你调用它的shell中,echo
在你尝试时需要将它作为参数传递.
归档时间: |
|
查看次数: |
6113 次 |
最近记录: |