Shell脚本中遇到的一些细节问题

本文详细解读了一个Shell脚本片段,重点讨论了单引号和双引号的区别及在字符串处理中的应用。通过实例分析,揭示了在特定场景下如何正确使用单引号和双引号以避免意外结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于字符串的单引号,双引号

#!/usr/bin/ksh -p

hotplug_dev="/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,2"

tmpfile=$(mktemp)
cat > $tmpfile << EOF
/
/  <pci.340>  ONLINE
/pci@340
{ PCI Express Root Complex }
/pci@340  <pci.1,0>  ONLINE
/pci@340/pci@1
/pci@340/pci@1  <pci.0,0>  ONLINE
/pci@340/pci@1/pci@0
/pci@340/pci@1/pci@0  <pci.5,0>  ONLINE
/pci@340/pci@1/pci@0/pci@5
/pci@340/pci@1/pci@0/pci@5  <pci.0,2>  ONLINE
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,2
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,2/fp
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,2/fp/disk
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,2/fp/st
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,2/fp@0,0
    { IO Multipathing PHCI (online) }
    { IOV virtual function 'pci.0,2' }
    { IOV virtual function 'pci.0,3' }
/pci@340/pci@1/pci@0/pci@5  <pci.0,3>  ONLINE
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,3
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,3/fp
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,3/fp/disk
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,3/fp/st
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,3/fp@0,0
    { IO Multipathing PHCI (online) }
EOF

hotplug_dev_format=$(echo $hotplug_dev|sed 's/\//\\\//g')
#hotplug_dev_format=${hotplug_dev//\//\\\/}
print $hotplug_dev_format
print "sed -n '/^${hotplug_dev_format}$/=' $tmpfile"
hotplug_dev_num=$(sed -n '/^${hotplug_dev_format}$/=' $tmpfile)
print $hotplug_dev_num

这段代码是某一个function的片段,其主要就是想获得hotplug_dev在tmpfile文件中所处的行数,继而通过该行数去取得想要的某一行

这段代码中的需要注意的点:

print "sed -n '/^${hotplug_dev_format}$/=' $tmpfile"

这句的结果就是

sed -n '/^$\/pci@340\/pci@1\/pci@0\/pci@5\/SUNW,emlxs@0,2$/=' $tmpfile

那么接下来执行这句

hotplug_dev_num=$(sed -n '/^${hotplug_dev_format}$/=' $tmpfile)

按理说应该执行的就是

sed -n '/^$\/pci@340\/pci@1\/pci@0\/pci@5\/SUNW,emlxs@0,2$/=' $tmpfile

但是其实得到的是空值,我自己手工在终端得到的就是12,但是在脚本中运行却为空值当换成下面的双引号后就会得到正确的结果.

hotplug_dev_num=$(sed -n "/^${hotplug_dev_format}$/=" $tmpfile)

这里就涉及到了单引号双引号的问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值