Bash:文件路径中的变量
我不明白这是怎么回事:Bash:文件路径中的变量,bash,variables,Bash,Variables,我不明白这是怎么回事: ls /sys/class/net/wlan0 addr_assign_type broadcast device flags iflink netdev_group queues subsystem uevent addr_len carrier dormant ifalias link_mode **operstate** speed tx_queue_len address dev_id duplex ifindex
ls /sys/class/net/wlan0
addr_assign_type broadcast device flags iflink netdev_group queues
subsystem uevent addr_len carrier dormant ifalias link_mode **operstate**
speed tx_queue_len address dev_id duplex ifindex mtu power statistics
for f in $(ls /sys/class/net/); do $(cat /sys/class/net/${f}/operstate); done
cat: /sys/class/net/eth0/operstate: No such file or directory
cat: /sys/class/net/lo/operstate: No such file or directory
cat: /sys/class/net/wlan0/operstate: No such file or directory
我猜$f没有及时扩展到cat
。我试过用引号,比如“$f”,但还是没用
这确实可行:
for f in $(ls /sys/class/net/); do echo /sys/class/net/${f}/operstate; done
/sys/class/net/eth0/operstate
/sys/class/net/lo/operstate
/sys/class/net/wlan0/operstate
以及:
我错过了什么?为什么
cat
看不到循环中的文件?您的bash脚本试图在/sys/class/net
的每个子目录中找到名为operate
的cat
文件,但找不到该文件。在第二个示例中,您只需使用echo
ing字符串即可打印出来 首先,您不应该在循环中重复/sys/class/net/
,因为$f
将已经包含这些目录
for f in $(ls /sys/class/net/); do $(cat ${f}/operstate); done
接下来,需要转到循环中的$(…)
。没有必要捕捉猫的输出
for f in $(ls /sys/class/net/); do cat ${f}/operstate; done
现在,$(ls…
可以使用一个简单的通配符:
for f in /sys/class/net/*; do cat ${f}/operstate; done
最后,整个循环可以用一个对cat的调用来代替
cat /sys/class/net/*/operstate
echo
不关心它的参数是否存在于文件系统中。是否在/sys/class/net/wlan0/operstate文件链接到其他设备(硬件名称)上执行ls-l操作,但是cat
是否工作?@Edouard我真的不知道。这就是你的shell的输出吗?这些看起来不像是正确的错误消息。我本以为cat:/sys/class/net//sys/class/net/eth0/operstate:没有这样的文件或目录
cat /sys/class/net/*/operstate