简单的bash脚本给我带来了麻烦

时间:2011-09-16 16:55:45

标签: macos bash terminal formatting

我很难让这个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 个答案:

答案 0 :(得分:5)

你应该这样做:

cd "$1"
open .

这可以避免运行子进程并处理sed脚本没有的各种问题(例如包含$符号的名称或其他shell元字符)。通常,如果变量(或位置参数,如$1)是可以包含空格的文件名,请每次使用双引号括起来。

答案 1 :(得分:4)

尝试将命令放在像

这样的反引号中
newstring=`echo "$oldstring" | sed 's/ /\\ /g')`

答案 2 :(得分:1)

@Jonathan Leffler是正确的解决方案,因为添加转义实际上并不是你想要的,但双引号确实如此。但是,我将借此机会指出使用bash的内置替换功能而不是sed添加转义的更好方法:

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

所以你有它,一个更好的方法来实现错误的解决方案。就个人而言,我投票支持乔纳森的。

相关问题