bash. read input “words” string between symbols [duplicate]





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







-1
















This question already has an answer here:




  • How do I split a string on a delimiter in Bash?

    34 answers




I have this kind of input in a bash I'm creating:



cat-dog-lion



I need my program to do something with each word like this



`if first_word == "cat" 
do stuff
if second_word == "dog"
do other stuff`


How should I do this?
Thank you










share|improve this question













marked as duplicate by georgexsh, tripleee bash
Users with the  bash badge can single-handedly close bash questions as duplicates and reopen them as needed.

StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;

$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');

$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
Nov 22 '18 at 12:13


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

























    -1
















    This question already has an answer here:




    • How do I split a string on a delimiter in Bash?

      34 answers




    I have this kind of input in a bash I'm creating:



    cat-dog-lion



    I need my program to do something with each word like this



    `if first_word == "cat" 
    do stuff
    if second_word == "dog"
    do other stuff`


    How should I do this?
    Thank you










    share|improve this question













    marked as duplicate by georgexsh, tripleee bash
    Users with the  bash badge can single-handedly close bash questions as duplicates and reopen them as needed.

    StackExchange.ready(function() {
    if (StackExchange.options.isMobile) return;

    $('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
    var $hover = $(this).addClass('hover-bound'),
    $msg = $hover.siblings('.dupe-hammer-message');

    $hover.hover(
    function() {
    $hover.showInfoMessage('', {
    messageElement: $msg.clone().show(),
    transient: false,
    position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
    dismissable: false,
    relativeToBody: true
    });
    },
    function() {
    StackExchange.helpers.removeMessages();
    }
    );
    });
    });
    Nov 22 '18 at 12:13


    This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.





















      -1












      -1








      -1









      This question already has an answer here:




      • How do I split a string on a delimiter in Bash?

        34 answers




      I have this kind of input in a bash I'm creating:



      cat-dog-lion



      I need my program to do something with each word like this



      `if first_word == "cat" 
      do stuff
      if second_word == "dog"
      do other stuff`


      How should I do this?
      Thank you










      share|improve this question















      This question already has an answer here:




      • How do I split a string on a delimiter in Bash?

        34 answers




      I have this kind of input in a bash I'm creating:



      cat-dog-lion



      I need my program to do something with each word like this



      `if first_word == "cat" 
      do stuff
      if second_word == "dog"
      do other stuff`


      How should I do this?
      Thank you





      This question already has an answer here:




      • How do I split a string on a delimiter in Bash?

        34 answers








      linux bash shell






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 22 '18 at 10:13









      LanodisoftLanodisoft

      154




      154




      marked as duplicate by georgexsh, tripleee bash
      Users with the  bash badge can single-handedly close bash questions as duplicates and reopen them as needed.

      StackExchange.ready(function() {
      if (StackExchange.options.isMobile) return;

      $('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
      var $hover = $(this).addClass('hover-bound'),
      $msg = $hover.siblings('.dupe-hammer-message');

      $hover.hover(
      function() {
      $hover.showInfoMessage('', {
      messageElement: $msg.clone().show(),
      transient: false,
      position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
      dismissable: false,
      relativeToBody: true
      });
      },
      function() {
      StackExchange.helpers.removeMessages();
      }
      );
      });
      });
      Nov 22 '18 at 12:13


      This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.









      marked as duplicate by georgexsh, tripleee bash
      Users with the  bash badge can single-handedly close bash questions as duplicates and reopen them as needed.

      StackExchange.ready(function() {
      if (StackExchange.options.isMobile) return;

      $('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
      var $hover = $(this).addClass('hover-bound'),
      $msg = $hover.siblings('.dupe-hammer-message');

      $hover.hover(
      function() {
      $hover.showInfoMessage('', {
      messageElement: $msg.clone().show(),
      transient: false,
      position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
      dismissable: false,
      relativeToBody: true
      });
      },
      function() {
      StackExchange.helpers.removeMessages();
      }
      );
      });
      });
      Nov 22 '18 at 12:13


      This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.


























          2 Answers
          2






          active

          oldest

          votes


















          0














          BASH solution:



          input='cat-dog-lion'
          if [[ "${input}" =~ "^cat-?" ]]
          then
          echo "do stuff"
          if [[ "${input}" =~ "^cat-dog-?" ]]
          then
          echo "do other stuff"
          fi
          fi


          If wanna AWK solution here it is:



          awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'


          Test:



          $ echo 'cat-dog-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
          do stuff
          do other stuff
          $ echo 'cat-wolf-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
          do stuff
          $ echo 'lynx-dog-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
          $





          share|improve this answer

































            -1














            If the input field separator is a -, you should call read with IFS set appropriately:



            echo 'cat-dog-lion' | { IFS=- read first_word second_word third_word other_stuff
            case $first_word in
            cat) ... ;;
            *) ... ;;
            esac
            case $second_word in
            ...
            esac
            ...
            }


            Note that the enclosing { and } are important, as the variables go out of scope after the closing {. (The pipe creates a subprocess in which the variables exist.)






            share|improve this answer






























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              0














              BASH solution:



              input='cat-dog-lion'
              if [[ "${input}" =~ "^cat-?" ]]
              then
              echo "do stuff"
              if [[ "${input}" =~ "^cat-dog-?" ]]
              then
              echo "do other stuff"
              fi
              fi


              If wanna AWK solution here it is:



              awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'


              Test:



              $ echo 'cat-dog-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
              do stuff
              do other stuff
              $ echo 'cat-wolf-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
              do stuff
              $ echo 'lynx-dog-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
              $





              share|improve this answer






























                0














                BASH solution:



                input='cat-dog-lion'
                if [[ "${input}" =~ "^cat-?" ]]
                then
                echo "do stuff"
                if [[ "${input}" =~ "^cat-dog-?" ]]
                then
                echo "do other stuff"
                fi
                fi


                If wanna AWK solution here it is:



                awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'


                Test:



                $ echo 'cat-dog-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
                do stuff
                do other stuff
                $ echo 'cat-wolf-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
                do stuff
                $ echo 'lynx-dog-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
                $





                share|improve this answer




























                  0












                  0








                  0







                  BASH solution:



                  input='cat-dog-lion'
                  if [[ "${input}" =~ "^cat-?" ]]
                  then
                  echo "do stuff"
                  if [[ "${input}" =~ "^cat-dog-?" ]]
                  then
                  echo "do other stuff"
                  fi
                  fi


                  If wanna AWK solution here it is:



                  awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'


                  Test:



                  $ echo 'cat-dog-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
                  do stuff
                  do other stuff
                  $ echo 'cat-wolf-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
                  do stuff
                  $ echo 'lynx-dog-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
                  $





                  share|improve this answer















                  BASH solution:



                  input='cat-dog-lion'
                  if [[ "${input}" =~ "^cat-?" ]]
                  then
                  echo "do stuff"
                  if [[ "${input}" =~ "^cat-dog-?" ]]
                  then
                  echo "do other stuff"
                  fi
                  fi


                  If wanna AWK solution here it is:



                  awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'


                  Test:



                  $ echo 'cat-dog-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
                  do stuff
                  do other stuff
                  $ echo 'cat-wolf-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
                  do stuff
                  $ echo 'lynx-dog-lion' | awk -F'-' '{ if ($1=="cat") { print("do stuff"); if ($2=="dog") print("do other stuff"); } }'
                  $






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 22 '18 at 11:00

























                  answered Nov 22 '18 at 10:33









                  KubatorKubator

                  1,02413




                  1,02413

























                      -1














                      If the input field separator is a -, you should call read with IFS set appropriately:



                      echo 'cat-dog-lion' | { IFS=- read first_word second_word third_word other_stuff
                      case $first_word in
                      cat) ... ;;
                      *) ... ;;
                      esac
                      case $second_word in
                      ...
                      esac
                      ...
                      }


                      Note that the enclosing { and } are important, as the variables go out of scope after the closing {. (The pipe creates a subprocess in which the variables exist.)






                      share|improve this answer




























                        -1














                        If the input field separator is a -, you should call read with IFS set appropriately:



                        echo 'cat-dog-lion' | { IFS=- read first_word second_word third_word other_stuff
                        case $first_word in
                        cat) ... ;;
                        *) ... ;;
                        esac
                        case $second_word in
                        ...
                        esac
                        ...
                        }


                        Note that the enclosing { and } are important, as the variables go out of scope after the closing {. (The pipe creates a subprocess in which the variables exist.)






                        share|improve this answer


























                          -1












                          -1








                          -1







                          If the input field separator is a -, you should call read with IFS set appropriately:



                          echo 'cat-dog-lion' | { IFS=- read first_word second_word third_word other_stuff
                          case $first_word in
                          cat) ... ;;
                          *) ... ;;
                          esac
                          case $second_word in
                          ...
                          esac
                          ...
                          }


                          Note that the enclosing { and } are important, as the variables go out of scope after the closing {. (The pipe creates a subprocess in which the variables exist.)






                          share|improve this answer













                          If the input field separator is a -, you should call read with IFS set appropriately:



                          echo 'cat-dog-lion' | { IFS=- read first_word second_word third_word other_stuff
                          case $first_word in
                          cat) ... ;;
                          *) ... ;;
                          esac
                          case $second_word in
                          ...
                          esac
                          ...
                          }


                          Note that the enclosing { and } are important, as the variables go out of scope after the closing {. (The pipe creates a subprocess in which the variables exist.)







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 22 '18 at 12:06









                          William PursellWilliam Pursell

                          134k33210244




                          134k33210244















                              Popular posts from this blog

                              Guess what letter conforming each word

                              Port of Spain

                              Run scheduled task as local user group (not BUILTIN)