Yes there is, but first a more thourough explanation then. If you have a string $str = 'abc', you can access any individual character in that string with $str[0], $str[1] and so on. Array elements work the same way, i.e. you would access an array element from $array = array('a', 'b', 'c') with $array[0], $array[1] and so on.
As such, when you use "$path/pdf_file.pdf[1]", the PHP parser sees "$path" which is replaced by the string it contains turning the string into "path/to/pdf_file.pdf[1]" which contains no more variables. PHP is done.
However with, "$path/$file[1]", PHP sees "$path" => "path/to/$file[1]" and then it sees "$file[1]" which is replaced by the second character in the string $file, turning it into "/path/to/d" (assuming $file = 'pdf_file.pdf')
Use string concatenation to make it clear to PHP what is a variable and what is a regular string
# one way - using string interpolation for the first part with $path
$path_and_file = "$path/".$file.'[1]';
# another way - not using string interpolation at all. let strings be nothing but character data
$path_and_file = $path . '/' . $file . '[1]';
# yet another way, use string interpolation on everything, but make sure to tell PHP what you want
$path_and_file = "$path/{$file}[1]"
Some people find string concatenation to be ugly and avoid it, others prefer it since you avoid accidentally getting results like you did (or other side effects).