awk 和 bash 脚本?
awk and bash script?
我想知道为什么它不起作用。
请多多指教。
1.工作
$ nu=`awk '/^Mem/ {printf(*0.7);}' <(free -m)`
$ echo $nu
1291.5
2。不工作
$ cat test.sh
#!/bin/bash
nu=`awk '/^Mem/ {printf(*0.7);}' <(free -m)`
echo $nu
$ sh test.sh
test.sh: command substitution: line 2: syntax error near unexpected token `('
test.sh: command substitution: line 2: `awk '/^Mem/ {printf(*0.7);}' <(free -m)'
能否请您尝试以下。
nu=$(free -m | awk '/^Mem/ {print *0.7}')
echo "$nu"
注意的事情是:
- 反引号的使用已被弃用,因此请使用
$
来存储变量的值。
- 另外,第一个 运行
free
命令通过使用 |
将其标准输出作为标准输入传递给 awk
命令(这应该是发送输出的理想方式命令 awk
在这种情况下特别)并将其输出保存到名为 nu
. 的变量中
- 现在终于通过
echo
打印变量 nu
。
- 由于
<(...)
进程替换由 bash 而不是 sh 支持,所以我试图提供一个解决方案,它可以在没有进程替换的情况下支持(我之前也提到过)。
之所以在脚本中加shebang是为了在文件具有执行权限的情况下定义一个解释器指令。
然后,你应该调用它,例如
$ ./test.sh
设置权限后
$ chmod +x test.sh
<( )
构造 ("process substitution") 并非在所有 shell 中都可用,甚至在 bash 中以名称 "sh" 调用时也不可用。当您 运行 带有 sh test.sh
的脚本时,它会覆盖 shebang(指定 bash),因此该功能不可用。您需要使用 bash
显式 运行 脚本,或者(更好)只是 运行 作为 ./test.sh
并让 shebang 行完成它的工作。
我想知道为什么它不起作用。 请多多指教。
1.工作
$ nu=`awk '/^Mem/ {printf(*0.7);}' <(free -m)`
$ echo $nu
1291.5
2。不工作
$ cat test.sh
#!/bin/bash
nu=`awk '/^Mem/ {printf(*0.7);}' <(free -m)`
echo $nu
$ sh test.sh
test.sh: command substitution: line 2: syntax error near unexpected token `('
test.sh: command substitution: line 2: `awk '/^Mem/ {printf(*0.7);}' <(free -m)'
能否请您尝试以下。
nu=$(free -m | awk '/^Mem/ {print *0.7}')
echo "$nu"
注意的事情是:
- 反引号的使用已被弃用,因此请使用
$
来存储变量的值。 - 另外,第一个 运行
free
命令通过使用|
将其标准输出作为标准输入传递给awk
命令(这应该是发送输出的理想方式命令awk
在这种情况下特别)并将其输出保存到名为nu
. 的变量中
- 现在终于通过
echo
打印变量nu
。 - 由于
<(...)
进程替换由 bash 而不是 sh 支持,所以我试图提供一个解决方案,它可以在没有进程替换的情况下支持(我之前也提到过)。
之所以在脚本中加shebang是为了在文件具有执行权限的情况下定义一个解释器指令。
然后,你应该调用它,例如
$ ./test.sh
设置权限后
$ chmod +x test.sh
<( )
构造 ("process substitution") 并非在所有 shell 中都可用,甚至在 bash 中以名称 "sh" 调用时也不可用。当您 运行 带有 sh test.sh
的脚本时,它会覆盖 shebang(指定 bash),因此该功能不可用。您需要使用 bash
显式 运行 脚本,或者(更好)只是 运行 作为 ./test.sh
并让 shebang 行完成它的工作。