Bash: глобальные различия в поведении в разных средах - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь выучить некоторые основы bash и столкнулся с неожиданным поведением при выводе некоторых строк, которые могут содержать символы "*". Теперь я пытаюсь понять, когда bash решает отключить вывод.

Я могу запустить следующую команду и выполнить ее в bash:

foo="*"; echo $foo

Вывод: *

Но затем, когда я помещаю тот же код в file, printFoo.sh и выполнить:

#!/usr/bin/env bash
foo="*"; echo $foo

Вывод: printFoo.sh foo.txt bar.txt

Чем отличается среда, когда команда запускается в файле, который вызывает эту разницу в поведении?

Моя bash версия: GNU bash, версия 3.2.57

Ответы [ 2 ]

2 голосов
/ 06 апреля 2020

bash не ведет себя иначе по сравнению с глобализацией при использовании в интерактивном режиме или в сценарии. Исходя из вашего поведения, я бы скорее пришел к выводу, что ваша интерактивная оболочка Zsh, поскольку это единственная известная мне оболочка, которая будет вести себя таким образом. Конечно, если вы написали zsh скрипт , он также не расширил бы $foo в вашем примере.

0 голосов
/ 06 апреля 2020

Я использую почти идентичную версию bash, но не могу воспроизвести вашу проблему. Другими словами, bash ведет себя ожидаемым для меня образом:

$ echo $BASH_VERSION 
3.2.57(1)-release
$ foo="*"; echo $foo
bar.txt foo.txt printFoo.sh

Я могу воспроизвести его, только если я процитирую foo в команде echo, которая дает ожидаемый результат подавления сбоев:

$ foo="*"; echo "$foo"
*
...