Я не знаю инструмента сравнения с такой опцией в файловом браузере, но будет интересно!
Я не знаю (до сих пор )kdiff3, я использую 'Meld' (запись 5 наhttps://www.tecmint.com/best-linux-file-diff-tools-comparison/)
Вот хороший инструмент для поиска альтернатив программному обеспечению:https://alternativeto.net/software/meld/?platform=linux
Узнайте, как переменные и кавычки работают в оболочке. Читайте о расширениях в man bash
.
usbToSave="test 1 2 3"
raspistill -awb greyworld -vf -hf -o /media/pi/"$usbToSave"/test.jpg
Переменные в оболочке не являются реальными переменными, какими вы их знаете из языков программирования. Они чем-то похожи на макросы, которые расширяются до значения. Если вы не заключаете переменную в кавычки, в результате произойдет разделение слов , двойные кавычки предотвращают это.
Кроме того, вы можете избежать пробелов при определении переменной :Эквивалентом usbToSave="test 1 2 3"
в предыдущем ответе является usbToSave=test\ 1\ 2\ 3
, где символ \
экранирует следующий пробел (или другой специальный символ, который может понадобиться в строке, например$
)
РЕДАКТИРОВАТЬ :Я добавил двойные -кавычки и кавычки вокруг экранированной строки, чтобы было ясно, как все это работает:
$ usbToSave_A="test 1 2 3"
$ usbToSave_B=test\ 1\ 2\ 3
$ echo $usbToSave_A
test 1 2 3
$ echo $usbToSave_B
test 1 2 3
$ echo /media/pi/"$usbToSave_A"/test.jpg
/media/pi/test 1 2 3/test.jpg
$ echo /media/pi/"$usbToSave_B"/test.jpg
/media/pi/test 1 2 3/test.jpg
$ echo "/media/pi/$usbToSave_A/test.jpg"
/media/pi/test 1 2 3/test.jpg
$ echo "/media/pi/$usbToSave_B/test.jpg"
/media/pi/test 1 2 3/test.jpg
$ usbToSave_C='"test 1 2 3"'
$ usbToSave_D="test\ 1\ 2\ 3"
$ echo $usbToSave_C
"test 1 2 3"
$ echo $usbToSave_D
test\ 1\ 2\ 3
$ echo "/media/pi/$usbToSave_C/test.jpg"
/media/pi/"test 1 2 3"/test.jpg
$ echo "/media/pi/$usbToSave_D/test.jpg"
/media/pi/test\ 1\ 2\ 3/test.jpg
$ echo "/media/pi/"$usbToSave_C"/test.jpg"
/media/pi/'test 1 2 3'/test.jpg
$ echo "/media/pi/"$usbToSave_D"/test.jpg"
/media/pi/test\ 1\ 2\ 3/test.jpg
usbToSave="\"test 1 2 3\""
raspistill -awb greyworld -vf -hf -o /media/pi/$usbToSave/test.jpg
Здесь вы заключаете в кавычки значение переменной, после присваивания оно будет содержать "test 1 2 3"
. Затем вы расширяете переменную без двойных кавычек, попадая в ловушку разбиения слов (см. ссылки ниже ). В результате raspistill
получает /media/pi/"test
, 1
, 2
и 3"/test.jpg
как отдельные аргументы командной строки.
Обратите внимание, что кавычки, которые вы помещаете в переменную, являются буквальными в результирующем слове, аргументе для raspistill
. Расширение переменной — это не замена обычного текста или расширение макроса:все, что выходит из переменной, в целом не рассматривается как синтаксис оболочки. В дополнение к кавычкам операторы оболочки, такие как &&
, >
, |
, ;
и т. д., также являются обычными символами при расширении из переменной. Разбиение слов и генерация имени файла являются единственными исключениями.
Вам нужно:
usbToSave="test 1 2 3"
raspistill -awb greyworld -vf -hf -o "/media/pi/$usbToSave/test.jpg"
То есть сделать раскрытие переменной в двойных кавычках, что предотвращает разбиение слов (и создание имени файла ).
См.: