Почему read -r ест текст? [дубликат]

Добавьте это в конфигурацию apache, и вы получите перенаправление всех веб-сайтов, которые не используют https, на ssl/tls

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L] 
0
29.03.2017, 18:24
3 ответа

Это не чтение, а эхо.

Я написал script.sh и вызвал его, используя sh script.sh.

В Debian и Ubuntu sh — это тире, в котором echo оценивает обратную косую черту в стиле C в своих аргументах:

$ dash -c 'foo="foo\000bar"; echo "$foo"; printf "%s\n" "$foo"' 
foo
foo\000bar

]\000 превращается в байт NUL, который, по-видимому, завершает строку, которую выводит echo. Заключение переменной в кавычки здесь не помогает, так как это только изменяет обработку командной строки оболочки перед запуском самой команды, а здесь сам echo обрабатывает обратную косую черту.

Это известная проблема переносимости, более подробно описанная здесь: Почему printf лучше, чем echo?

Например, echo в Bash выполняет обратную косую черту, если задан аргумент -e.

Первоначально вопрос был помечен как , поэтому, если вы хотите запустить скрипт с помощью Bash, запустите его с помощью bash script.sh, а не sh script.sh. .

4
28.01.2020, 02:16

Этого можно добиться гораздо более простым и надежным способом с помощью sed:

sed -i 's|\\|/|g' myfile

Дает:

cat myfile 51 Pipe-line/Closed3/00001011_-_Portfolio/UW/Old/NID50_Future_022814.xls

EDIT:

Следуя вашему комментарию, вот как я бы этого добился:

for i in $(cat test | awk '{print $2}')
do
  mv $i `sed 's|\\|/|g' <<< $i`
done
1
28.01.2020, 02:16

Достаточно этого:

tr '\\' / < names.txt
0
28.01.2020, 02:16

Теги

Похожие вопросы