Сzsh
:
zmodload zsh/files
rand() REPLY=$RANDOM
autoload zargs zmv
files=(*.ext)
# shuffle the list by using our custom "rand" order function
new_files=(*.ext(o+rand))
# append a ".new" suffix
new_files=($^new_files.new)
# rename files
zargs -l2 -- ${files:^new_files} -- mv --
# remove the.new extension once all the files are renamed
zmv '(*.ext).new' '$1'
Та же идея, что и у @ilkkachu, но не делается предположений о том, какие символы могут содержать имена файлов, и не требуется никаких внешних утилит (zsh/files
содержит встроенную mv
команду ).
Если ваша оболочка POSIX
совместима (, в случае, если printf
является встроенной командой )или вызывает совместимую printf
, просто попробуйте:
printf -- "$var"
Это указывает printf
не интерпретировать следующий аргумент как опцию.
В целом, однако, имейте в виду, что процент или обратная косая черта в содержании $var
могут привести к тому, что ваш вывод будет изменен так, как вы не ожидаете. По этой причине
printf "%s" "$var"
— лучшее решение.
Весь смысл printf
в том, что вы не используете его для вывода переменной напрямую, а вместо этого передаете формат, а затем переменную в качестве аргумента:
$ gdbParameters="-ex 'set pagination off' -ex 'set environment G_MESSAGES_DEBUG = all'"
$ printf '%s\n' "$gdbParameters"
-ex 'set pagination off' -ex 'set environment G_MESSAGES_DEBUG = all'
Что касается сохранения переменной способом, который никогда не будет мешать любому коду, который попытается ее использовать, то это невозможно. Вместо этого вам нужно позаботиться и всегда писать хороший, чистый код, который может работать с произвольным содержимым в переменной.
Вот основные рекомендации, такие как всегда заключать переменные в кавычки (см. Почему мой сценарий оболочки забивается пробелами или другими специальными символами? и Последствия для безопасности, если забыли заключить переменную в кавычки в оболочках bash/POSIX)и использовали стандарт --
для обозначения конца параметров всякий раз, когда вы вызываете программу и передаете ей переменную в качестве входных данных (e.g. grep -- "$variable" file
). ].