Bash 测试输入变量$1是否包含在单引号中

Bash 测试输入变量$1是否包含在单引号中,bash,Bash,我有一个脚本,它要求用户输入一些文本,如$script.sh someText,但我需要确保用户输入的文本用单引号括起来,如$script.sh“someText”。但我似乎不知道如何测试引号 关于用户可以输入什么类型的输入还有其他限制,例如没有空格,当然也没有单引号作为输入的一部分,我可以通过读取$1轻松地测试这两个限制,但是如何读取BASH没有正确读取的作为输入变量$1一部分的if单引号,用于打开和关闭用户输入?您无法判断命令行是使用单引号、双引号还是不使用引号编写的,因为shell会将它们

我有一个脚本,它要求用户输入一些文本,如
$script.sh someText
,但我需要确保用户输入的文本用单引号括起来,如
$script.sh“someText”
。但我似乎不知道如何测试引号


关于用户可以输入什么类型的输入还有其他限制,例如没有空格,当然也没有单引号作为输入的一部分,我可以通过读取
$1
轻松地测试这两个限制,但是如何读取BASH没有正确读取的作为输入变量$1一部分的if单引号,用于打开和关闭用户输入?

您无法判断命令行是使用单引号、双引号还是不使用引号编写的,因为shell会将它们全部删除

如果您有脚本
echoit

#!/bin/bash
printf "%s\n" "$@"
然后,您可以按以下方式运行它:

echoit No\ Quotes "Double Quotes" 'Single Quotes'
输出将是:

No Quotes
Double Quotes
Single Quotes

shell从用户输入中删除引号是有意义的。不过,用户可能会输入特殊字符作为输入的一部分,因此单引号封装输入确保脚本按照用户的意图获得输入。例如,如果用户输入
$script.sh E/$G
,如果不使用单引号,脚本将把输入读取为
E/
,只有bc,
$G
部分是,TBH,我不确定会发生什么。但我知道需要单引号来确保所有字符作为用户输入传递给脚本。我想可能是
read
zenity
用单引号强制输入。如果我告诉你:如果用户将
G=“Giant Muslium”
设置为shell变量,那么
echoit'E/$G'“E/$G”E/$G
将产生
E/$G
E/Giant Muslium
E/Giant
musmool
作为4行输出。@nanker如果需要特殊字符,您能否在脚本中检查它们?用户可能输入的示例文本
E/$G
,可能读起来很复杂。我的名字叫。这些仅仅是用户可以输入的4个字符,而不需要将
$G
作为变量传递。只是当不包含在单引号中时,该字符组合就是一个不会按照用户的意愿传递到脚本的条目示例。实际上,正是脚本要求使用单引号,以确保它以
$1
的形式读入用户键入的所有内容。@jidder如果事先知道用户可能键入的输入,脚本可以测试特殊字符。但脚本只需要用户提供一些输入,包括90个字符的组合(92减去不允许的单引号和空格字符)。但若用户并没有将输入括在单引号中,那个么他们键入的某些内容可能不会传递给脚本。继续示例,如果用户键入
E/$G
作为输入,而不使用单引号,则只将
E/
传递给脚本,脚本不知道用户实际键入了4个字符,而不是2个字符。