Hoe kan ik een positionele parameter als een achtervoegsel gebruiken bij het maken van een map?

Ik schrijf een klein bash-script en ik probeer op deze manier een map te maken:

mkdir ~/deploy. $ 1

Ik zou denken dat het deploy.scriptFoo zou moeten produceren of wat ooit het waardevolle van $ 1 is.

Het produceert alleen "deploy". en het weglaten van de variabele $ 1. Ik heb de variabele $ 1 in de uitvoer getest en ik ben er zeker van dat deze in het script wordt doorgegeven. Om het even welke ideeën?

0
Vergeef een heel eenvoudige vraag, maar noem je het script met scriptFoo als eerste argument: ./ myscript scriptFoo ? Wat gebeurt er als u de regel wijzigt in echo mkdir ~/deploy. $ 1 ?
toegevoegd de auteur Adam Liss, de bron
Het werkt voor mij. Laat de rest van het script zien en hoe je het aanroept plus de uitvoer van de echo die Adam Liss suggereert.
toegevoegd de auteur Dennis Williamson, de bron

1 antwoord

Het probleem

De parameter $ 1 positie is het eerste argument voor uw script, niet de naam van het script zelf.

De oplossing

Als u de scriptnaam wilt gebruiken, gebruikt u $ 0. Bijvoorbeeld, gezien dit voorbeeldscript opgeslagen in /tmp/param_test.sh:

#!/bin/bash
mkdir "/tmp/deploy.$(basename "$0" .sh)"
ls -d /tmp/deploy*

het script negeert eventuele argumenten, maar retourneert de volgende uitvoer correct:

/tmp/deploy.param_test

Als u de naam wilt variëren, moet u een positionele parameter gebruiken in uw script en het script bellen met een argument. Bijvoorbeeld:

#!/bin/bash
mkdir "/tmp/deploy.$1"
ls -d /tmp/deploy*

Op de opdrachtregel geeft u het argument door aan uw script. Bijvoorbeeld:

$ bash /tmp/param_test.sh foo
/tmp/deploy.foo

Zie ook

http://www.gnu.org/software/bash/manual /bashref.html#Positional-Parameters

0
toegevoegd