文件名中的多个空格传递给bash脚本

时间:2018-04-15 19:57:14

标签: bash

假设我有一个名为script1的脚本,我想传递一个名为file in 1的文件("文件和&#34之间有4个空格;"

所以,我希望能够将此文件名传递给脚本而不使用"":

./script1 file    in 1

而不是:

./script1 "file    in 1"

我尝试使用" $ *"在脚本中正确接收文件名,但脚本收到的是:file in 1(省略空格)

有没有办法在bash中这样做?

2 个答案:

答案 0 :(得分:1)

你无能为力或应该做什么。假设您的脚本(正确地)写为

#!/bin/bash
cat "$1"

如果您的教师希望您的脚本处理

./script file    in 1

./script "file    in 1"

同样地,你的导师对shell如何运作有着深刻的误解。

答案 1 :(得分:-1)

命令:

./script file    in 1

将使用三个不同的输入文件执行./scripfilein1。如果您希望./scripfile in 1作为单个文件阅读,但又不想在通话中使用引号,那么您有以下选择:

#!/usr/bin/env bash

# Not ideal, as it also matches any number of characters 
# between "file", "in" and "1": file--in--1
cat "$(ls $1*$2*$3)"                  

# Better but also matches single (or any number) of spaces: file in 1
cat "$(ls $1*$2*$3 | grep "$1 *$2 *$3")"

# Will only match: file    in 1
cat "$(ls $1*$2*$3 | grep -E "$1 {4}$2 {1}$3")"