HH123_3 2022-04-28 10:33 采纳率: 86.8%
浏览 44
已结题

bash学习过程中的疑问3:到底带不带引号?

执行以下命令,从终端中获得一个输入,赋值给变量a
a=$(cat)
当我在终端下输入如下字符串的时候:

hello
world

那么此时的a=$(cat)是等价于
a="hello world"
还是
a=hello world
即此时的$(cat)被替换成了hello world还是"hello world"

我想应该是被替换成了"hello world", 因为如果是a=hello world,会报错,但这条命令正确执行了。

img

img

但是如果我改变一下命令,加一个括号
a=($(cat))

如果我们依然将$(cat)展开为"hello world",那么
a=("hello world")
a就变成了一个只有元素hello world的数组,但是事实却并非如此,此时的a是一个包含两个元素helloworld的数组,即此时的$(cat)展开为不带引号的hello world才是对的。和上面是矛盾的。

img

  • 写回答

2条回答 默认 最新

  • ioryhm 2022-04-29 09:44
    关注

    这个问题,我思考了一下,不太能表述清楚,需要你自己理解一下,
    双引号其实是我们要告诉shell这个字符串是否为一个整体,而非shell反馈给我们这个字符串是不是一个整体的标识。
    拿你上面的举个例子

    a=$(cat)#在这里a接受的是cat的命令返回值,cat有合并输出的作用,它会把hello world作为一个整体输出给a,shell再去获取这个a时它就是hello world
    a=($(cat))  #在这里同样hello wolrd被作为一个整体输出到列表中即(hello world),shell再去解析这个列表时被当做两个元素。
    a=("$(cat)")   #这里我们用”“告诉shell要把输出的结果作为一个整体的字符串输出给列表即("hello world"),接下来shell去解析这个列表时只有一个元素,那就是hello world
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月7日
  • 已采纳回答 4月29日
  • 创建了问题 4月28日

悬赏问题

  • ¥15 怎样才能让鼠标沿着线条的中心线轨迹移动
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?