Запитання з тегом «variable»

Змінна - це ім'я, якщо його правильно обрано із символічним значенням, яке містить значення чи значення. Використовуйте цей тег, якщо ваше питання є специфічним щодо використання змінних в сценарії оболонок (якщо ви хочете запитати про змінні в мовах програмування, ви, ймовірно, повинні запитати в StackOverflow)

2
Як вставити змінні всередині рядка, що містить ""?
Я хочу побудувати рядок xml, вставивши змінні: str1="Hello" str2="world" xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>' echo $xml Результат повинен бути <?xml version="1.0" encoding="iso-8859-1"?><tag1>Hello</tag1><tag2>world</tag2> Але я отримую: <?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2> Я також спробував xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>" Але це видаляє внутрішні подвійні лапки і дає: <?xml version=1.0 encoding=iso-8859-1?><tag1>hello</tag1><tag2>world</tag2>
25 bash  shell  variable  xml 

4
Чому моя змінна локальна в одному циклі "while read", а не в іншому, здавалося б, подібному циклі?
Чому я отримую різні значення $xіз наведених нижче фрагментів? #!/bin/bash x=1 echo fred > junk ; while read var ; do x=55 ; done < junk echo x=$x # x=55 .. I'd expect this result x=1 cat junk | while read var ; do x=55 ; done echo x=$x # …


5
Навіщо використовувати подвійні лапки в [[]] тесті?
Скажімо, у нас є два цілих числа в bash-скрипті: value1=5 value2=3 Тоді навіщо нам використовувати подвійні лапки у разі тесту? Наприклад: if [[ "$value1" -eq "$value2" ]] Чому б просто не скористатися наступним? if [[ $value1 -eq $value2 ]] Для мене подвійні цитати не мають жодного сенсу.
23 bash  shell  quoting  variable  test 


3
Як я можу розширити цитовану змінну до нічого, якщо вона порожня?
Скажіть, у мене сценарій: some-command "$var1" "$var2" ... І, якщо var1це порожнє, я вважаю за краще, щоб його замінили нічим, а не порожнім рядком, щоб команда виконувалася: some-command "$var2" ... і ні: some-command '' "$var2" ... Чи є простіший спосіб, ніж тестування змінної та умовно включення її? if [ -n …

2
Встановлення змінної оболонки в нульовий спосіб злиття
Мені дуже подобається "null coalescing", де ви можете встановити змінну на перше "non-null" значення в списку речей. Багато мов це підтримують, наприклад: C #: String myStr = string1 ?? string2 ?? "default"; JavaScript: var myStr = string1 || string2 || "default"; ... тощо. Мені просто цікаво, чи можна це зробити …
20 bash  shell  variable 

4
dirname та basename vs розширення параметра
Чи є об’єктивні причини віддати перевагу одній формі іншій? Продуктивність, надійність, портативність? filename=/some/long/path/to/a_file parentdir_v1="${filename%/*}" parentdir_v2="$(dirname "$filename")" basename_v1="${filename##*/}" basename_v2="$(basename "$filename")" echo "$parentdir_v1" echo "$parentdir_v2" echo "$basename_v1" echo "$basename_v2" Виробляє: /some/long/path/to /some/long/path/to a_file a_file (v1 використовує розширення параметра оболонки, v2 використовує зовнішні бінарні файли.)

4
Уникніть змінної для використання як вмісту іншого сценарію
Це запитання не стосується того, як записати правильно вийшов рядковий літерал. Я не зміг знайти жодного пов'язаного питання, яке стосується того, як уникнути змінних для прямого споживання в сценарії чи іншими програмами. Моя мета - включити сценарій для генерації інших сценаріїв. Це відбувається тому, що завдання в генерованих сценаріях будуть …


5
Труба призначає змінну
Для простоти я хотів би зробити: echo cart | assign spo; echo $spo Вихід: візок Чи існує така assignпрограма? Мені відомі всі способи зробити це за допомогою заміни.
19 bash  variable 

3
Використання змінних оболонок для параметрів команд
У сценарії Bash я намагаюся зберігати параметри, якими я користуюся, rsyncв окрему змінну. Це добре працює для простих варіантів (наприклад --recursive), але у мене виникають проблеми з --exclude='.*': $ find source source source/.bar source/foo $ rsync -rnv --exclude='.*' source/ dest sending incremental file list foo sent 57 bytes received 19 …
19 bash  variable 

1
Чому $ {$ #} повертає такий самий результат, як $$ в оболонці?
Намагаючись отримати останній встановлений позиційний параметр /bin/dash, я намагався echo ${$#}. Дивно, але це не призвело до помилки, але до PID, який є таким же, як $$зміст змісту. Питання: чому цей синтаксис працював? Яке синтаксичне правило, яке тут застосовано оболонкою? В основному, те, що я зробив $ set 1 2 …
18 shell  variable 

3
Чому параметри в змінній, що котирується, виходять з ладу, але працюють, коли вони не мають котирування?
Я читав про це, я повинен навести змінні в bash, наприклад "$ foo" замість $ foo. Однак під час написання сценарію я знайшов випадок, коли він працює без лапок, але не з ними: wget_options='--mirror --no-host-directories' local_root="$1" # ./testdir recieved from command line remote_root="$2" # ftp://XXX recieved from command line relative_path="$3" …

6
Чи слід цитувати змінні при виконанні?
Загальне правило сценаріїв оболонок полягає в тому, що змінні повинні завжди цитуватися, якщо немає вагомих причин цього не робити. Для отримання більш детальної інформації, ніж ви, мабуть, хочете дізнатись, подивіться на цей чудовий запитання та запитання: наслідки для безпеки забуття процитувати змінну в оболонках bash / POSIX . Розглянемо, однак, …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.