我很难让这个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 .
答案 0 :(得分:5)
你应该这样做:
cd "$1"
open .
这可以避免运行子进程并处理sed
脚本没有的各种问题(例如包含$
符号的名称或其他shell元字符)。通常,如果变量(或位置参数,如$1
)是可以包含空格的文件名,请每次使用双引号括起来。
答案 1 :(得分:4)
尝试将命令放在像
这样的反引号中newstring=`echo "$oldstring" | sed 's/ /\\ /g')`
答案 2 :(得分:1)
@Jonathan Leffler是正确的解决方案,因为添加转义实际上并不是你想要的,但双引号确实如此。但是,我将借此机会指出使用bash的内置替换功能而不是sed
添加转义的更好方法:
newstring="${oldstring/ /\\ }"
所以你有它,一个更好的方法来实现错误的解决方案。就个人而言,我投票支持乔纳森的。