Эквивалентная команда в bash терпит неудачу? - PullRequest
0 голосов
/ 21 октября 2011

Итак, этот код работает:

unzip $1 'CSE-5500_Computer_Science_Seminar_-_Menezes_(CSE-5500_FA11_Menezes-001)_2011_Fall_files/presentation.xml'

Но этот код не:

main="CSE-5500_Computer_Science_Seminar_-_Menezes_(CSE-5500_FA11_Menezes-001)_2011_Fall_files/presentation.xml"
unzip $1 \'$main\'

Многие варианты этого тоже не работают ... почему?Это удивительно сбивает с толку, и я хотел бы найти решение этой проблемы

1 Ответ

4 голосов
/ 21 октября 2011

Попробуйте unzip $1 "$main"

То, как вы делаете это, имеет слишком много кавычек.

В верхней версии:

Синглкавычки не позволяют bash пытаться интерпретировать сам аргумент, но обрезаются так, что unzip передается строка без кавычек.

Во втором случае:

  • Если вы нене цитируйте аргумент, bash попытается интерпретировать скобки в $main, что приведет к ошибкам.
  • Если вы не введете кавычки, bash снова попытается интерпретировать скобки.
  • ЕслиВы вводите в кавычки аргумент, bash не будет расширять переменную, и unzip будет передана литеральная строка "$main" в качестве второго аргумента.
  • Если вы дважды заключите в кавычку аргумент, все будет1026 * точно .
...