在shell中打印字符串时出现问题

在shell中打印字符串时出现问题,shell,unix,sh,string,Shell,Unix,Sh,String,我有一个用unixshell语言编写的脚本(不是用bash或任何其他shell,用sh),它打印给定usb的挂载点(即,它以usb的路径(例如/dev/sdb1)作为参数)。这是: #!/bin/sh # usage: get_mount [path] # returns: mount pount of given usb path pth=$1 echo $pth mountPoint="`df -h | grep $pth | tr -s \" \"| cut \"-d \" -f6`"

我有一个用unixshell语言编写的脚本(不是用bash或任何其他shell,用sh),它打印给定usb的挂载点(即,它以usb的路径(例如/dev/sdb1)作为参数)。这是:

#!/bin/sh
# usage: get_mount [path]
# returns: mount pount of given usb path

pth=$1
echo $pth
mountPoint="`df -h | grep $pth | tr -s \" \"| cut \"-d \" -f6`"
echo $mountPoint
问题是,当我运行它时,它只打印一个空白字符串,我知道该命令可以工作,因为我在终端中尝试过它,没有问题:它只是将它分配给变量,而不起作用。有人有什么想法吗?提前谢谢

将-d前面的\移动到-d后面

mountPoint="`df -h | grep $pth | tr -s \" \"| cut -d \" \" -f6`"

通过有效使用单引号和双引号,您将简化您的生活:

mountPoint="`df -h | grep $pth | tr -s ' ' | cut -d' ' -f6`"
调试的第一步是删除
cut
命令并查看它产生了什么:

mountPoint="`df -h | grep $pth | tr -s ' '`"
echo $mountPoint
它是否仍然打印6(或更多)列

请注意,如果将参数拼错到命令,则
grep
将不会传递任何内容到
cut

在我的机器(Mac)上,我从
df-h
获取输出:

Filesystem      Size   Used  Avail Capacity  Mounted on
/dev/disk0s2   465Gi  189Gi  277Gi    41%    /
devfs          111Ki  111Ki    0Bi   100%    /dev
map -hosts       0Bi    0Bi    0Bi   100%    /net
map auto_home    0Bi    0Bi    0Bi   100%    /home
/dev/disk1s1   1.8Gi  8.8Mi  1.8Gi     1%    /Volumes/BLACKBERRY

请注意,某些文件系统名称中有空格。这不太可能是问题的一个因素,但可能会造成问题(装入点是字段7)“< /P>”不是这样的;该引用有助于指定字段定界符是空白的。YEP…但是,对<代码> -d>代码>的参数可以附加到它,并且该问题中的原始符号通过使用<代码> -d“< /Cord>”将空白作为参数传递给<代码> -d>代码>。“,但原稿还可以,尽管不是我自己脚本中使用的形式。只是它没有按照原版发布的方式工作,我做了更改,它工作了。也许它需要双重转义或者其他什么,但是一旦我按照上面的帖子让它工作,我就停止了测试。这个脚本使用我的系统的
df-h
(/dev/fd)上列出的唯一设备工作。您能否发布您的
df-h
输出的相关部分?您能否给我们一个示例输入和所需输出?我相当肯定sh将有一定数量的参数扩展技术,以完全消除tr和/或cutThank you的需要!我记得我也尝试过使用单引号,但它不起作用,但出于某种原因,现在它起作用了。。。无论如何谢谢你@DVK:每个FS两行输出也会把事情搞砸——但OP说它是从命令行工作的。。。