shell 中使用双引号包裹变量跟不用双引号包裹变量的区别

在shell中定义一个变量,例如:

CHANNEL="Hello world!"

那么在引用这个变量时,$CHANNEL跟"$CHANNEL"这两种写法有什么区别呢?

1、$CHANNEL 没有加引号:

$CHANNEL
  • 作用:将变量展开为多个参数(如果变量值中包含空格,会被当成多个参数)。

  • 风险:若 $CHANNEL 中含有空格或特殊字符,会被 shell 拆分为多个参数,导致程序收到的参数不正确。

CHANNEL="Hello world!"
./build/samples/kvsWebrtcClientMaster $CHANNEL
# 实际等同于:
./build/samples/kvsWebrtcClientMaster Hello world!

程序会接收到 2 个参数:Hello, world! 

2、$CHANNEL 加了引号:

"$CHANNEL"
  • 作用:无论内容是否含空格,始终作为 一个整体参数 传给程序。

  • 推荐用法:安全且稳定,能避免解析错误。

CHANNEL="Hello world!"
./build/samples/kvsWebrtcClientMaster "$CHANNEL"
# 实际等同于:
./build/samples/kvsWebrtcClientMaster "Hello world!"

程序收到 一个完整的参数:Hello world!

【总结】

如无特别需求,请总是加引号,这是一种良好的 Bash 编程习惯。特别是在处理用户输入或变量时,加引号几乎是必须的。 

你可能感兴趣的:(AWS,WebRTC,服务器,linux,运维)