Почему делает - текст =, “$” только передают первое слово?

Похоже, что Вы забыли работать make install.

Если Вы действительно работали make install, но ни один из Ваших файлов энергии не найден под /usr/local/share/vim, затем, возможно, у Вас есть проблема полномочий - то есть, Нельзя установить файлы там.

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

$ cd vim/src
$ ./configure --enable-rubyinterp --enable-multibyte --prefix=/home/aeg/myvim
$ make
$ make install
$ export PATH=/home/aeg/myvim/bin:$PATH
$ vim
9
09.11.2016, 14:27
2 ответа

$@ расширяется для разделения слов (тогда как $* расширяется до отдельного слова), как объяснено в bash руководство. Таким образом, когда Вы пишете

zenity --text="$@"

это расширяется до

zenity --text="$1" "$2" "$3"

Однако окружите переменные присвоения, не подвергаются разделению слова. Обратите внимание, что поле / разделение слова опущено в списке расширений для переменных присвоений в bash руководство. Это поведение согласовывается со спецификацией POSIX. Так, когда Вы пишете

text="$@"

переменная text получает все позиционные параметры как отдельное слово, эквивалентное тому, если Вы записали text="$*". Действительно, это - причина, двойные кавычки являются часто ненужными в переменных присвоениях. Оба

text=$@

и

text=$*

совершенно безопасны.

Так,

text=$@
zenity --option="$text"

расширяется "$text" к отдельному слову, которое является, почему это работает. Обратите внимание что --option="$@" просто нормальный аргумент команде zenity, и не присвоение переменной оболочки, которое является, почему разделение слова происходит здесь, но не в text=$@.

16
27.01.2020, 20:04
  • 1
    +1. Это будет также работать: zenity --text="$*" -- "$*" расширяется до отдельного слова. –  glenn jackman 26.10.2012, 23:31
  • 2
    +1 для обучения мне одна вещь: человек! = документация. Я должен, искал информационный удар, он также содержит ручной раздел, с которым Вы связались. –  manatwork 27.10.2012, 12:59

$@ будьте расширены каждый параметр в отдельном слове, став

zenity --entry --text="arg1" "arg2" "arg3" # syntactically wrong for zenity

Использовать $* вместо этого развернуть его в отдельном слове

zenity --entry --text="$*"

который станет

zenity --entry --text="arg1 arg2 arg3" # syntactically correct for zenity
7
27.01.2020, 20:04
  • 1
    Пролейте свет на то, почему вариант $text от вопроса OP работает как ожидалось –  iruvar 26.10.2012, 21:11
  • 2
    @ChandraRavoori, Вы поймали меня с этим. Согласно руководству “разделение Word не выполняется, за исключением "$"” и, “Если дважды заключенное в кавычки расширение происходит в слове, к расширению первого параметра присоединяются с начинающейся частью оригинального слова, и к расширению последнего параметра присоединяются с последней частью оригинального слова”. таким образом, я ожидал бы text="$@" быть расширенным до text="arg1" "arg2" "arg3", который должен перестать работать. Но конечно не имеет место. –  manatwork 26.10.2012, 21:37
  • 3
    @ChandraRavoori, причиной является полевое разделение, не происходит в переменных присвоениях. Я объясняю более подробно в моем ответе. –  jw013 26.10.2012, 22:48
  • 4
    @jw013: Но согласно Справочнику Bash, "$@" действительно подвергается разделению слова, даже в переменных присвоениях. –  ruakh 27.10.2012, 04:35
  • 5
    @ruakh в руководстве удара не говорится это насколько я знаю. У Вас есть кавычка? –  jw013 27.10.2012, 04:37

Теги

Похожие вопросы