28

I don't know why I get error while running this simple script:

#!/bin/bash

read -p "Please enter directory name: " DIR
read -p "Please enter the path: " PATH
mkdir -p "$PATH/$DIR"
line 7: mkdir: command not found
Biffen
  • 6,249
  • 6
  • 28
  • 36
MLSC
  • 5,872
  • 8
  • 55
  • 89

2 Answers2

61

Don't use the variable PATH. This variable contains a list of directories to search for executable programs. Since you're replacing it, the script can no longer find the mkdir program.

In general, avoid using variables that are all uppercase, these are often used as parameters for the shell or other programs.

Barmar
  • 741,623
  • 53
  • 500
  • 612
  • 1
    @lmsurprenant That's not just MacOS, it's `zsh` on any OS. But this question is tagged `bash`. – Barmar Jul 27 '22 at 14:53
6

The variable PATH is an important environment variable - it is the way that programs (like mkdir) are found, and you are overwriting it. You shouldn't do that, but if you must then:

/bin/mkdir -p "$PATH/$DIR"

but honestly DON'T USE UPPERCASE! There are loads of reserved or special variables in Bash, and if you can't remember them all then just remember that all except one is in UPPERCASE. Variables in Bash are case-sensitive, like in all sensible programming languages.

cdarke
  • 42,728
  • 8
  • 80
  • 84
  • You say "... all except one is in UPPERCASE." Which one? – rjmunro Aug 15 '16 at 16:52
  • @rjmunro `PATH` has to be uppercase, and is a special variable, so it is `DIR`. – cdarke Aug 15 '16 at 19:12
  • Perhaps I misunderstood. You say "There are loads of reserved or special variables in bash ... all except one is in UPPERCASE". What is the one bash reserved/special variable that is not upper case? Or is that not what you meant to say? – rjmunro Aug 17 '16 at 13:42
  • 1
    In Bash 4 there are now two shell variables that are lowercase `auto_resume` and `histchars`. See `man bash` for a list of variables used by the shell, all but those two are uppercase. – cdarke Aug 17 '16 at 14:17