我有一个小脚本,当使用 IFS 时,它不会给出逗号分隔的输出,但 IFS 是强制性的,因为我需要它来读取许多其他值。以下脚本的输出是odi_server1 odi_server2
,但我需要它用逗号分隔。
#Script Starts
#!/bin/sh
IFS=","
odi_cluster=odi_server1,odi_server2;
echo $odi_cluster;
#Script Ends
电流输出=odi_server1 odi_server2
预期输出 =odi_server1,odi_server2
注意:-IFS=","
是强制性的,因此不能删除它。
答案1
由于您$odi_cluster
在对 的调用中使用不加引号的方式echo
,因此 shell 会将变量的值拆分为也出现在 中的任何字符$IFS
(然后对生成的单词执行文件名通配)。通常,$IFS
包含一个空格、一个制表符和一个换行符,但您已将其重新设置为逗号。
如果变量的值是odi_server1,odi_server2
and$IFS
包含逗号,则此拆分会产生两个单词odi_server1
and odi_server2
。这些将echo
作为两个单独的参数给出,echo
实用程序将使用分隔空格输出它们。
为了避免 letIFS
对输出产生任何影响,请防止 shell 通过引用扩展来分割变量的值:
echo "$odi_cluster"
或者
printf '%s\n' "$odi_cluster"
有关的:
请注意,您可以通过调用以下命令IFS
仅为read
内置实用程序设置变量read
IFS=, read ...
这可以避免IFS
为脚本的其余部分设置非默认值。
可能还相关:
另请注意,-行的字符#
和必须是文件的第一个字符,并且不需要以 a 结束每个语句,除非同一行上还有其他语句。!
#!
;