我正在尝试此选项
#!/bin/ksh
echo $1
awk '{FS="=";print $2}' $1
并在命令行上
test_sh INSTANCE=VIJAY
但是awk失败了。这有什么问题吗?
基本上我需要在命令行上传递值VIJAY
。
答案 0 :(得分:3)
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
答案 1 :(得分:2)
awk
,,第二个参数是要处理的文件的名称。
所以你要求它处理名为INSTANCE=VIJAY
相反,做
echo "$1" | awk '{FS="=";print $2}'
为了清楚起见,这样做是通过来自echo
输出的管道通过标准输入将要处理的输入传递给awk;而不是awk从文件中读取输入。
引用Awk manual:
如果命令行中没有命名文件,gawk会读取标准输入。
答案 2 :(得分:1)
我认为更简单的是
#!/bin/sh
echo $1
echo $1 | cut -d= -f2
因为cut
也可以在等号上拆分,然后显示第二个令牌。另请注意,传递$1
到awk
不正确,因为该参数不是文件。
答案 3 :(得分:0)
我认为你离开了管道(|)
echo $1 | awk '{FS="=";print $2}'
替代
echo $1 | cut -d'=' -f2
答案 4 :(得分:0)
#!/bin/ksh
echo $1 | cut -f2 -d=