Единственный способ сделать так, чтобы раскрытие переменной исчезло, — это раскрыть раскрытие до пустого значения, когда это раскрытие не заключено в кавычки.
$ unset a; b=''; c=set
$ printf '<%s> ' unquoted $a $b quoted "$a" "$b" val $c "$c"; echo
<unquoted> <quoted> <> <> <val> <s> <t> <set>
Как неустановленные, так и пустые значения переменных(a
иb
)исчезают (в качестве аргументов ), если они не заключены в кавычки. Оба сохраняются при цитировании.
Кроме того, даже пробелы (или любой символ )исчезнут, если они включены в IFS.
$ IFS=' '
$ unset a; b=' '; c=' set '
$ printf '<%s> ' unquoted $a $b quoted "$a" "$b" val $c "$c"; echo
<unquoted> <quoted> <> < > <val> <set> < set >
Фактически, IFS, содержащая символы в значении для расширения (без кавычек ), будет разделять аргументы.
$ IFS='e '
$ $ printf '<%s> ' unquoted $a $b quoted "$a" "$b" val $c "$c"; echo
<unquoted> <quoted> <> < > <val> <s> <t> < set >
Обратите внимание на два аргумента <s>
и <t>
, возникшие в результате раскрытия значения set
, когда IFS содержало e
.
Итак, нам нужно раскрытие неуказанных или пустых значений без кавычек, которое становится раскрытием значения в кавычках, когда есть значение для раскрытия:
${var:+"$var"}
Описание:
${ # starts an un-quoted variable expansion
var # name of variable to expand
: # also replace if var is null
+ # use what follows if is not unset (nor null)
"$var" # a quoted variable expansion.
} # end of expansion.
# In short: expand "$var" if it has a value, $var otherwise.
Затем мы можем использовать значение $1
, чтобы либо убрать его, либо расширить
echo ${1:+"--noise"} ${1:+"$1"}
В приведенной выше строке будет либо напечатано два отдельных аргумента (, не затронутых IFS ), если $1
имеет некоторое (ненулевое )значение, либо ничего, если $1
пустой или не установлен.
Скрипт станет:
#!/bin/sh
echo "Noise $1"
echo "Enhancement $2"
for snr in 0 5 10 15 20 25
do python evaluate.py \
${1:+"--noise"} ${1:+"$1"} \
--snr "$snr" \
--iterations 1250 \
${2:+"--enhancement"} ${2:+"$2"}
done
На это решение не влияет значение IFS
Насколько мне известно, программа установки Windows не может напрямую считывать свои файлы из файла ISO. Вы должны извлечь файлы в файловую систему на диске. Я рекомендую rufus сделать это.
Этот вопрос относится к этой статье для решения только для Linux -, но я не пробовал его с последними версиями Windows.
Мне удалось установить Windows 10, и она работает. У меня есть две копии iso-содержимого Windows, помещенные в разделы NTFS A и B, следуйте инструкциям NorbiPeti, выберите /efi/boot/bootx64.efi в B в качестве цепного загрузчика, загрузитесь с помощью установщика Windows, не пытайтесь установить сейчас, переключитесь на командной строке и запустите setup.exe из A :\source.