【发布时间】:2024-01-19 14:18:01
【问题描述】:
我正在尝试这个选项
#!/bin/ksh
echo $1
awk '{FS="=";print $2}' $1
在命令行上
test_sh INSTANCE=VIJAY
但是 awk 失败了。这里有什么问题吗?
基本上我需要在命令行上传递的值VIJAY。
【问题讨论】:
我正在尝试这个选项
#!/bin/ksh
echo $1
awk '{FS="=";print $2}' $1
在命令行上
test_sh INSTANCE=VIJAY
但是 awk 失败了。这里有什么问题吗?
基本上我需要在命令行上传递的值VIJAY。
【问题讨论】:
ksh(和 Bash)可以为您进行拆分:
#!/bin/ksh
var="${1%=*}"
val="${1#*=}"
echo "Var is $var"
echo "Val is $val"
运行它:
$ ./scriptname INSTANCE=VIJAY
Var is INSTANCE
Val is VIJAY
【讨论】:
对于awk,第二个参数是要处理的文件的名称。
所以你要求它处理名为INSTANCE=VIJAY的文件
相反,做
echo "$1" | awk '{FS="=";print $2}'
需要明确的是,它的作用是将要处理的输入通过标准输入通过管道从echo 的输出传递给awk;而不是 awk 从文件中读取它的输入。
引用Awk manual:
如果命令行上没有指定文件,gawk 会读取标准输入。
【讨论】:
我认为更简单的是
#!/bin/sh
echo $1
echo $1 | cut -d= -f2
cut 也可以在等号上拆分,然后显示第二个标记。另请注意,将$1 传递给awk 是不正确的,因为该参数不是文件。
【讨论】:
我认为你离开了管道(|)
echo $1 | awk '{FS="=";print $2}'
另类
echo $1 | cut -d'=' -f2
【讨论】:
#!/bin/ksh
echo $1 | cut -f2 -d=
【讨论】: