Простой скрипт bash, доставляющий мне проблемы - PullRequest
0 голосов
/ 16 сентября 2011

Мне трудно заставить этот bash-скрипт выполнить форматирование ввода.Это довольно просто, но когда он выполняет строку, начинающуюся с 'newstring =', он не выполняет операцию sed, он только печатает мой ввод (вплоть до первого пробела), а затем печатает мою команду sed сразу после,Что я делаю не так?

#! /bin/bash

##format paths/strings with spaces to escape the spaces with a forward-slash'\'
##then use 'open' to open finder at current-set directory (based on path)

oldstring="$1"
newstring="$oldstring | sed 's/ /\\ /g')"
cd $newstring
open .

Ответы [ 3 ]

5 голосов
/ 16 сентября 2011

Вы должны просто сделать:

cd "$1"
open .

Это позволяет избежать запуска подпроцессов и решает различные проблемы, которых нет в скрипте sed (например, имена, содержащие символы $ или другие метасимволы оболочки). Как правило, если переменная (или позиционный параметр, такой как $1) - это имя файла, которое может содержать пробелы, используйте его каждый раз в двойных кавычках.

4 голосов
/ 16 сентября 2011

Попробуйте ввести команду в кавычки, например

newstring=`echo "$oldstring" | sed 's/ /\\ /g')`
1 голос
/ 17 сентября 2011

@ Джонатан Леффлер - правильное решение, поскольку добавление escape-символов на самом деле делает не то, что вам нужно, а двойные кавычки. Однако я воспользуюсь этой возможностью, чтобы указать, что есть лучший способ добавить экранирование, используя встроенную в bash возможность подстановки вместо sed:

newstring="${oldstring/ /\\ }"

Итак, у вас есть лучший способ реализовать неправильное решение. Лично я голосовал за Джонатана.

...