如何编写接收字符串作为包含星号的参数的shell脚本(在HPUX上使用bash)?
e.g. myscript my_db_name "SELECT * FROM table;"
星号扩展到当前目录中的所有文件名,如果我分配了这样的变量。
DB_QUERY="$2"
echo $DB_QUERY
答案 0 :(得分:2)
如果要阻止它引发文件名扩展,您总是需要在变量引用周围加上双引号。因此,在您的示例中,使用:
DB_QUERY="$2"
echo "$DB_QUERY"
答案 1 :(得分:2)
星号“*”不是唯一需要注意的字符,还有很多其他的shell元字符可能会导致问题,例如< > $ | ; &安培;
简单的答案总是在你不知道它们可能包含的内容时将你的参数放在引号中(这是双引号“)。
对于您的示例,您应该写:
DB_QUERY="$2"
echo "$DB_QUERY"
当您希望将参数用作多个参数或开始使用eval时,它开始变得尴尬,但您可以单独询问它。
答案 2 :(得分:0)
在第一个示例中,使用单引号:
myscript my_db_name 'SELECT * FROM table;'
在第二个示例中,使用双引号:
echo "$DB_QUERY"