Intereting Posts

Сценарий оболочки декодирования Url

Как сохранить строку с расширением url в переменной, используя сценарий оболочки

#!/bin/sh alias urldecode='python -c "import sys, urllib as ul;print ul.unquote_plus(sys.argv[1])"' str="this+is+%2F+%2B+%2C+.+url+%23%24coded" decoded = ${urldecode $str} echo $decoded 

Я пытаюсь сохранить декодированную строку в переменной с именем decoded.

 #!/bin/sh - urldecode() { python -c "import sys, urllib as ul;print ul.unquote_plus(sys.argv[1])" "$1" } str="this+is+%2F+%2B+%2C+.+url+%23%24coded" decoded=$(urldecode "$str"} printf '%s\n' "$decoded" . #!/bin/sh - urldecode() { python -c "import sys, urllib as ul;print ul.unquote_plus(sys.argv[1])" "$1" } str="this+is+%2F+%2B+%2C+.+url+%23%24coded" decoded=$(urldecode "$str"} printf '%s\n' "$decoded" 

То есть:

  • избегайте псевдонимов в сценариях, поскольку это не гарантировано для работы (некоторые реализации sh, такие как bash игнорировать псевдонимы, когда не интерактивны)
  • цитируйте свои переменные. Выход из переменной без кавычек – это оператор split + glob в оболочках.
  • Оператор для подстановки вывода команды – $(...)
  • синтаксис присваивания переменных в Bourne-подобных оболочках не допускает пробелов вокруг = , echo = x означает вызов команды echo с аргументами = и x качестве аргументов, а не присваивание x переменной echo .
  • Вы не можете использовать echo для отображения произвольных данных, вместо этого используйте printf .