2017-01-18 1 views
0

Мне бы хотелось создать скрипт bash, который создает md5-хэш строки. НО строка может содержать специальные символы и пробелы. Как я могу понять, что такая строка читаема, например. md5sum?Bash: Генерировать mh5-хэш строки со специальными символами

Я написал следующий сценарий как «md5.sh»:

#!/bin/bash 
echo -n $1 | md5sum | awk '{print $1}' 

Но если я использую «./md5.sh» (с пробелом в конце) это не будет распознан. Также не цитируется цитата из сценария. И один "завершится в строку приглашения ...

Надежда кто-то может помочь мне :)

+0

'a single 'закончится в приглашении' - вы должны привести аргументы к скрипту, так что если вы делаете' ./md5.sh' '' '(это двойная кавычка внутри двух одинарных кавычек), вы получите правильный ответ , То же самое касается любых строк, содержащих пробелы – arco444

ответ

1

Во-первых, вам нужно процитировать параметр в сценарии (и использовать printf, мир был бы лучше если люди забыли echo существовало):

printf '%s' "$1" | md5sum | awk '{print $1}' 

Во-вторых, передать фактическое пространство в качестве аргумента, оно должно быть заключено в кавычки, а так, что оболочка не отбрасывает его:

./md5.sh " " 
+0

Спасибо, это работает для пробелов, но как насчет других специальных символов? Например. для одиночного или двойного будут работать: './md5.sh '"' 'или' ./md5.sh "'" '. Но что, если строка содержит как одиночные, так и двойные кавычки? – Epyx

+0

Если в ней есть оба типа котировок, вам нужно избежать их с помощью обратного слэша. '' '\ "" '- это строка, состоящая из одной кавычки и двойной кавычки. Обратите внимание, что вы не можете включить даже пропущенную одиночную кавычку внутри одинарных кавычек ('' \ '' 'не является допустимой строкой, или, скорее, это котируемая обратная косая черта, за которой следует незакрытая одинарная кавычка), хотя' bash' предоставляет еще одну форму цитирования, что позволяет избежать одиночных кавычек: '$ '\' ''. – chepner

Смежные вопросы