![Bash 嵌套命令替换不起作用](https://linux22.com/image/49035/Bash%20%E5%B5%8C%E5%A5%97%E5%91%BD%E4%BB%A4%E6%9B%BF%E6%8D%A2%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
你好,我有一个 bash 脚本,打算通过以下方式运行watch ./script.sh
这是为了调试我的笔记本电脑的冷却问题,但是我编写的脚本没有按预期工作。我对 bash 脚本很陌生,所以我确信它很简单。
我的脚本中有一行具有嵌套命令替换,但内部命令似乎不起作用,或者至少看起来内部命令不知道 的值$i
。任何帮助表示赞赏。
这是脚本:
echo "THERMAL ZONE 2:"
echo "Cur Temp: $(cat /sys/class/thermal/thermal_zone2/temp)"
for i in {2..7}
do
echo "cooling_device$i STATE: $(cat /sys/class/thermal/thermal_zone2/cdev$i/cur_state) TRIP POINT TEMP: $(cat /sys/class/thermal/thermal_zone2/trip_point_$(cat /sys/class/thermal/thermal_zone2/cdev$i_trip_point)_temp)"
done
输出如下:
THERMAL ZONE 2:
Cur Temp: 43000
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device2 STATE: 1 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device3 STATE: 1 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device4 STATE: 0 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device5 STATE: 0 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device6 STATE: 0 TRIP POINT TEMP:
cat: /sys/class/thermal/thermal_zone2/cdev: No such file or directory
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
cooling_device7 STATE: 0 TRIP POINT TEMP:
答案1
我看到的最明显的错误是您没有保护i
循环变量。因此,当您编写 时$i_trip_point
,shell 正在寻找名为 的变量i_trip_point
,该变量未设置,因此您会收到第二种类型的错误,例如:
cat: /sys/class/thermal/thermal_zone2/trip_point__temp: No such file or directory
point
和之间的两个下划线标记temp
正在插入的空变量。您应该使用语法${i}_trip_point
。大括号可保护您的变量,避免相邻字符被解释为变量名称的一部分。