Home > Net >  How to reassign a variable (zsh) when using source utility
How to reassign a variable (zsh) when using source utility

Time:10-17

The code below tests if the character from a string is matching regex or not.

str=")Y"
c="${str:0:1}"
if [[ $c =~ [A-Za-z0-9_] ]]; then
    echo "YES"
    output=$c
else
    echo "NO"
    output="-"
fi
echo $output

I am running it with

source script-name.sh

However, instead of expected printout

NO
-

I am getting an empty line without dash

NO

I understand the issue is somehow around the way i (re-)assign output variable which being me to questions

  1. How to do it properly?
  2. Why source utility has such implication?

UPD_1: it is for Mac's zsh, not bash UPD_2: the issue occurs only when running script via 'source' utility like "source script-name.sh"

Running with "./script-name.sh" yield correct result as well.

CodePudding user response:

Your code gives the expected output for bash 4.2.46 on RHEL7. Are you maybe using zsh?

See echo 'the character - (dash) in the unix command line

EDIT: Ok, if it's zsh, you probably have to use a hack:

if [[ ${output} == '-' ]]; then
    echo - ${output}
else
    echo ${output}
fi

or use printf:

printf  $output"\n"
  • Related