【问题标题】:problem in shell scriptshell脚本中的问题
【发布时间】:2024-01-19 14:18:01
【问题描述】:

我正在尝试这个选项

#!/bin/ksh

echo $1
awk '{FS="=";print $2}' $1

在命令行上

test_sh INSTANCE=VIJAY

但是 awk 失败了。这里有什么问题吗? 基本上我需要在命令行上传递的值VIJAY

【问题讨论】:

    标签: bash unix shell awk


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      对于awk,第二个参数是要处理的文件的名称。 所以你要求它处理名为INSTANCE=VIJAY的文件

      相反,做

      echo "$1" | awk '{FS="=";print $2}'
      

      需要明确的是,它的作用是将要处理的输入通过标准输入通过管道从echo 的输出传递给awk;而不是 awk 从文件中读取它的输入。

      引用Awk manual

      如果命令行上没有指定文件,gawk 会读取标准输入。

      【讨论】:

      • 将 FS 变量放入 BEGIN 块中。
      【解决方案3】:

      我认为更简单的是

      #!/bin/sh
      
      echo $1
      echo $1 | cut -d= -f2
      

      cut 也可以在等号上拆分,然后显示第二个标记。另请注意,将$1 传递给awk 是不正确的,因为该参数不是文件。

      【讨论】:

        【解决方案4】:

        我认为你离开了管道(|)

        echo $1 | awk '{FS="=";print $2}' 
        

        另类

        echo $1 | cut -d'=' -f2
        

        【讨论】:

          【解决方案5】:
          #!/bin/ksh
          echo $1 | cut -f2 -d=
          

          【讨论】:

            最近更新 更多